【问题标题】:Template class forward declaration [duplicate]模板类前向声明​​ [重复]
【发布时间】:2013-05-09 11:47:24
【问题描述】:

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

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

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

【问题讨论】:

  • 如果我没有错,你应该这样做:模板 template void serialize(Archive &ar, outer &var, ...) { }。我不记得了,但我认为您也可以将模板放在一行中: template
  • 为什么不能使用模板
  • @tomislav-maric 我想我需要分离模板声明;我认为它们是独一无二的,不应该混为一谈。我会按照你的建议去做。提出答案,我会投票并标记。
  • @Mushy 谢谢你的等待,我回答了.. :)

标签: c++ templates forward-declaration


【解决方案1】:

尝试使用两个模板参数:

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

}

【讨论】:

    【解决方案2】:

    我可能理解错了,但你能不能不这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 2016-12-29
      • 1970-01-01
      相关资源
      最近更新 更多