テンプレートでvc++だと大丈夫なのにgccに怒られる
Posted: 2013年6月27日(木) 22:54
vc++でboost::serializationを使うときに、ヘッダーファイルを軽くするためにboost関連を
インクルードせずにboost::serialization::accessの前方宣言だけにしていました。
vc++ではテンプレートは使われるまでチェックされないようなので、テンプレート関数の中には
好き放題書いていました(cppファイルで使われるときに完全であればよいと考えていました)。
しかし、g++でコンパイルしてみるとテンプレート関数はインスタンス化されていないのに
内部の文法に関してエラーが出て困りました(make_nvpが無いなど).
boostヘッダーをあまりインクルードしたくないのですが、これは仕方のないものなのでしょうか?
インクルードせずにboost::serialization::accessの前方宣言だけにしていました。
vc++ではテンプレートは使われるまでチェックされないようなので、テンプレート関数の中には
好き放題書いていました(cppファイルで使われるときに完全であればよいと考えていました)。
しかし、g++でコンパイルしてみるとテンプレート関数はインスタンス化されていないのに
内部の文法に関してエラーが出て困りました(make_nvpが無いなど).
boostヘッダーをあまりインクルードしたくないのですが、これは仕方のないものなのでしょうか?
// In "Object.h"
// vc++ではこれらをヘッダーでインクルードしなくてよかった
//#include <boost/serialization/nvp.hpp>
//#include <boost/serialization/base_object.hpp>
//#include <boost/serialization/split_member.hpp>
namespace boost {
namespace serialization {
class access;
}
}
class Object
{
public:
private:
int id;
// Serialization
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int file_version)
{
ar & boost::serialization::make_nvp("id", id);
}
};