私はここで少し深く、正直になるでしょう。TUがコンパイルに含まれる原因は何ですか?
奇妙な実験をしています。私のクラスを工場で匿名の名前空間を使って登録することが前提となっています。最近まで、以下をクラス定義(.cpp)に追加することはそのトリックを行うでしょう。
これはマクロでラップされ、 'Register'はそのタイプと名前を工場に渡します。
これは正常に動作し、静的ライブラリにコードを移動するまで、このマクロを含むすべてのクラスが登録されていました。今、クラスはファクトリによってのみ参照されるので、ビルドから省略されているように見えます。私の 'Register'関数はもはや呼び出されていないので、私のファクトリは空です。
私はすべてのマクロをマネージャオブジェクトのコンストラクタに移動することでこれを解決することができましたが、そこで参照するとすぐに.cppファイル内のマクロが呼び出されるようになったことに気付きました。私はクラスが実際に何かによって参照されているので、私は推測しました。
しかし、私はこのようにしたいとは思っていませんし、コンストラクタ内のクラスを参照する非コミット方法を見つけることができません(例えばclass ClassToRegister;
)。私の登録マクロが呼び出されます。
まず、これは意味がありますか?
第2に、これらのTUを強制的にコンパイルして、実行時に匿名の名前空間を使用できるようにするためのアドバイスはありますか?
(a)スタティックライブラリの構築方法を教えてください。 (この問題に対処する) – sehe
TU:http://en.wikipedia.org/wiki/Translation_unit_(programming) - この例では、それは.hで表されるクラスです。 .cppファイル。 これはIOFの製品であると思われます。 – acron