如何在类模板之外定义嵌套成员模板?

新手上路,请多包涵

考虑以下类模板:

 template <class T>
class MyClass
{
   void MyFunc();
};

template <class T>
void MyClass<T>::MyFunc()
{
  //...implementation goes here
}

我需要添加另一个函数模板 MyFunc2 它接受模板参数 T2 即,

 template <class T>
class MyClass
{
   void MyFunc();

   template <class T2>
   static void MyFunc2(T2* data);
};

template <class T>
void MyClass<T>::MyFunc()
{
  //...implementation goes here
}

template <class T, class T2>
void MyClass<T>::MyFunc2(T2* pData)  // error here
{
  //...implementation goes here
}

我正在使用 VS 2008 编译器。我收到错误消息:

错误 C2244:无法将函数定义与现有声明匹配

在这种情况下,函数的定义和声明应该是什么样子?

原文由 SysAdmin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 818
1 个回答
template <class T>
template <class T2>
void MyClass<T>::MyFunc2(T2* pData)
{
  //...implementation goes here
}

$14.5.21 - “模板可以在类或类模板中声明;这样的模板称为成员模板。 成员 模板可以在其类定义或类模板定义之内或之外定义。 在其类模板定义之外定义的类模板应使用类模板的模板参数和成员模板的模板参数来指定。

原文由 Chubsdad 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题