0

次のように、テンプレートの外部クラスと内部クラスを前方宣言しています

template<class T>
class outer;

class inner;

上記の宣言の直後に、次のようにboost::serialization定義された宣言があります

namespace boost
{
    namespace serialization
    {
         template<class Archive> 
         void serialize(Archive &ar, outer &var, ...) { }
    }

}

Outer はテンプレート クラスであるため、テンプレート引数の指定が必要です。次のようにしようとすると

...
     void serialize(... outer<T> &var ... ) { }
...

テンプレート宣言は 1 つしか許可されていないため、これはエラーです。そのような前方宣言を定義する適切な方法は何ですか?

4

2 に答える 2

2

2 つのテンプレート パラメーターを使用してみてください。

namespace boost
{
    namespace serialization
    {
         template<class Archive, class T> 
         void serialize(Archive &ar, outer<T>& var, ...) { }
    }

}
于 2013-05-09T19:19:27.470 に答える
1

誤解しているかもしれませんが、これを行うことはできません:

template <class Archive, typename T>
void serialize( Archive archive, out<T> &var, ... );
于 2013-05-09T16:24:19.647 に答える