模板类前向声明

Template class forward declaration

本文关键字:声明      更新时间:2023-10-16

我提前声明一个模板外部和内部类,如下所示

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 ... ) { }
...

这是一个错误,因为只允许一个模板声明。定义这种前向声明的正确方法是什么?

尝试使用两个模板参数:

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

我可能误解了,但是你能不能不要这样做:

template <class Archive, typename T>
void serialize( Archive archive, out<T> &var, ... );