根据这个答案boost 和 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;
}
}
现在我的优势在于减少了编译时间,但是我的库的所有用户都遇到了构建错误(例如,未知的 boost::scoped_ptr...),因为缺少包含(现在已移至我的stdafx.h
.
有什么办法可以解决这个困境?
我希望减少编译时间并在包含我的头文件后编译错误对于 dll 的任何用户都是不可接受的。
这有帮助吗?
- 保留所有包含指令,但在我的“stdafx.h”中复制它们?由于 stdafx.h 总是首先包含在我项目的任何 cpp 文件中,所以我应该没问题,并且用户不会收到任何错误。或者,如果在一个翻译单元中出现多个包含相同标题的内容(有标题保护),我是否会失去速度优势?
感谢您的任何提示!