2
我有一个使用模板元编程的Visual Studio 2008 C++ 03应用程序。 MPL可以花费大量的时间来编译(〜15分钟)。每次我对代码的某些不相关的部分进行小的修改时,我显然不想承担这个代价。所以,我想分解它们来分离目标文件。打破模板代码以分离编译单元
例如:
// Foo.hpp
template< typename T >
inline boost::shared_ptr<Bar> Foo(const Data& d)
{
/* MPL magic takes a long time to compile */
switch(d.a)
{
case 0:
return MPLMagic::Create< ZeroTraits, T >(d.b, d.c );
case 1:
return MPLMagic::Create< OneTraits, T >(d.b, d.c);
default:
return MPLMagic::Create< DefaultTraits, T >(d.b, d.c);
}
}
// Bob.hpp
#include "Foo.hpp"
template< typename X, typename Y >
inline void BobFunc()
{
Data d = /* Bob's data */;
boost::shard_ptr<Bar> created = Foo<BobTraits>(d);
// do bob stuff
}
// Charlie.hpp
#include "Foo.hpp"
template< typename X, typename Y >
inline void CharlieFunc()
{
Data d = /* Charlie's data */;
boost::shard_ptr<Bar> created = Foo<CharlieTraits>(d);
// do charlie stuff
}
我怎样才能区分这些头文件出来,从而改变查理不承担Bob的编译和改变一些不相关的部分不需要重新编译他们两个?
好吧,既然'BobFunc'和'CharlieFunc'不是模板,没有在头文件中定义它们应该会有很大帮助。 –
您是否尝试过为'Foo.hpp'使用预编译头文件? – Naveen
@MatthieuM。实际上也会帮助编译,看到他们不是'内联'和所有... –