テンプレートメタプログラミングを使用するVisualStudio2008 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
}
チャーリーへの変更でボブの再コンパイルが発生せず、関連のないセクションへの変更で両方を再コンパイルする必要がないように、これらのヘッダーファイルを分離するにはどうすればよいですか?