1

免責事項: C または C++ のいずれかの純粋主義者がこれを好まないことはわかっています。仕事は成し遂げる必要があります。

C ライクなコーディング (ただし、もちろん C++ コンパイラでコンパイル) をより楽しくするために、C++ の非 OOP 関連機能をできるだけ多く使用したいと考えています。最終製品は、C プログラムに比較的簡単に組み込むことができる C ライクなライブラリ (および付随する実行可能ファイル) である必要があります。

たとえば、私がひどく必要とするのは関数のオーバーロードです。クライアント コード (C で記述) はlibffiなどを使用してマングルされた名前を取得できるので、関数を呼び出すことができると思います。

その他の優れた機能は、デフォルト値とおそらくテンプレートです。

C++ ライブラリ (C のみ) は使用せず、例外も RTTI もオブジェクトも使用しません。

  1. これらの制限の下で使用できる、C にはない C++ 機能の完全なリストは何ですか? また、可能な限り簡単に機能させるための一般的なライブラリと手法は何ですか?
  2. 何に注意すればよいですか?

私は関連する質問について知っていますが、私が言ったように、グルーコードは必要ありません(おそらく、クライアントが C++ を使用しない場合に行う必要があるマングリング部分を除いて)、そして私はOOP 機能は使用しません。私は妥協する準備ができています。

4

1 に答える 1

1

これは実際には質問に答えていないので、私はこれに対して多くの反対票を投じますが...

  • 外部から移植可能に呼び出されたい場合は、C プロトタイプを使用します。オーバーロードなし、デフォルト引数なし、テンプレートなし、C++ 型なし。Cタイプのみ。整数、浮動小数点数、およびポインター (不透明で不完全な C++ 構造体へのポインターは問題ありません)。クライアント ライブラリで libffi などを使用する必要があると、問題が発生します。
  • C++ の機能とライブラリを使用したい場合は、それらを使用しても、少し作業するだけで上記に準拠できます ( を忘れずextern "C"に、すべての例外をキャッチしてください)。

クライアントが C++ を使用したくない場合 (これは完全に理解できます)、とにかくグルー コードを作成する必要があります。グルー コードを最小限に抑える唯一の解決策は、きれいな APIを設計することです。

ほとんど接着剤を必要としない方法で「トップレイヤー」(外部から見える API の近く) を記述し、内部に C++ を使用することが可能です。

于 2012-12-20T10:36:01.053 に答える