この回答によると、ブーストヘッダーとSTLヘッダーは、プリコンパイル済みヘッダーファイル(stdafx.h
MSVCの世界)に属しています。そこで、ダイナミックリンクライブラリプロジェクトのヘッダーを変更し、すべてのSTL/Boostヘッダーをプロジェクトのに移動しましたstdafx.h
。
前
#include <boost/smart_ptr.hpp>
namespace XXX
{
class CLASS_DECL_BK CExampleClass // CLASS_DECL_BK is just a standard dll import/export macro
{
private:
boost::scoped_ptr<Replica> m_replica;
}
}
後
namespace XXX
{
class CLASS_DECL_BK CExampleClass
{
private:
boost::scoped_ptr<Replica> m_replica;
}
}
これで、コンパイル時間が短縮されるという利点がありますが、インクルードがないため(現在はmyに移動されています)、ライブラリのすべてのユーザーにビルドエラー(例:unknown boost :: scoped_ptr ...)が発生していstdafx.h
ます。
このジレンマの解決策は何でしょうか?
ヘッダーファイルをインクルードした後のコンパイル時間とコンパイルエラーを減らしたいのですが、dllのユーザーには受け入れられません。
これは役に立ちますか?
- すべてのincludeディレクティブをそのままにしておきますが、それらを「stdafx.h」に複製しますか?stdafx.hは常に私のプロジェクトのcppファイル内に最初に含まれているので、問題はないはずです。ユーザーはエラーを受け取りません。または、同じヘッダーの複数のインクルードが1つの変換ユニットで発生した場合(ヘッダーガードを取得した場合)、速度の利点が失われますか?
ヒントをありがとう!