0

可変個引数テンプレートはコンパイル時の機能であるため、ABI への影響や実行時の動作の変更はほとんどないと考えられます。これは可能ですか?

特に、boost::mpl::vector と boost::mpl::string のコンパイル時間が短縮されるという利点が必要です。

質問を言い換えます...

c++03 と c++11 のコードをライブラリに分けて混在させることはできますか? つまり、gcc 4.3 と互換性のあるかなりの数のサードパーティ製 c++ ライブラリを使用していますが、gcc 4.7 にも移行しており、可能/合理的な場合は c++11 機能を使用する予定です。それとも、c++11 と c++03 を混在させることは不可能ですか?

4

2 に答える 2

1

互換モードで実行されている同じツールを使用して、すべてをコンパイルおよびリンクする必要があります。このような機能を厳選することはできません。

ABI の影響は、たとえば、標準 I/O クラスの仮想関数テーブルの増加に現れます。物を混ぜるのは安全ではありません。

于 2011-09-19T12:38:14.667 に答える
0

適切な回答はできませんが、私が理解したところでは、この種の下位互換性が失われると多くの人が心配するだろうということです。私が理解している限り、新しい C++11 には、すべてを再構築する必要があるものは何もありません。したがって、それを必要とするのは特定のコンパイラだけである可能性があります。GCC については期待していませんが、libstdc++ のバージョンが異なると「問題」が発生する可能性があります。

私の強い推測では、典型的な (インテル) Linux では、gcc のかなり新しいバージョン (おそらく >4.x) を使用して 2 つの独立したライブラリを作成し、それらを最終的なプログラムに使用/リンクできるはずです。ただし、そこに2回あるものがあるかもしれません。4.7.0 および<thread>. それらが他のスレッドライブラリ(ブーストなど)との良いミックスを作成するか悪いミックスを作成するかはわかりません。ただし、製品コードにはまだ gcc-4.7.0 を使用したくありません。そして、最終的な gcc コンパイラがリリースされる前に、担当プロジェクト チームからの声明だけが確実性を与えることができます。

于 2011-09-21T12:27:29.377 に答える