テンプレートでvc++だと大丈夫なのにgccに怒られる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dom

テンプレートでvc++だと大丈夫なのにgccに怒られる

#1

投稿記事 by dom » 12年前

vc++でboost::serializationを使うときに、ヘッダーファイルを軽くするために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);
    }
};

“C言語何でも質問掲示板” へ戻る