Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 如何在cpp文件中实现成员函数MyClass<;T>;::我的会员<;U>;?_Templates_Generics_C++11 - Fatal编程技术网

Templates 如何在cpp文件中实现成员函数MyClass<;T>;::我的会员<;U>;?

Templates 如何在cpp文件中实现成员函数MyClass<;T>;::我的会员<;U>;?,templates,generics,c++11,Templates,Generics,C++11,我试图将模板化类MyClass的模板化成员函数f的实现放在.cpp中(出于安全原因): templateclass MyClass { 公众: 模板intf() { /* ... */ 返回0; } }; 如何将f()代码放入.cpp文件中(而不是留在头文件中) 我尝试了很多事情: 模板模板int事件生成器::f() 模板int事件生成器::f() 没有任何效果,反复出现的错误消息是:“非法使用显式模板参数”简短的回答是(大部分情况下)您不能这样做 实际上,这可能是一个重复的问题,请参见:

我试图将模板化类MyClass的模板化成员函数f的实现放在.cpp中(出于安全原因):

templateclass MyClass
{
公众:
模板intf()
{ 
/* ... */
返回0;
}
};
如何将f()代码放入.cpp文件中(而不是留在头文件中)

我尝试了很多事情:

模板模板int事件生成器::f()

模板int事件生成器::f()

没有任何效果,反复出现的错误消息是:“
非法使用显式模板参数”

简短的回答是(大部分情况下)您不能这样做

实际上,这可能是一个重复的问题,请参见:

另一个有用的来源:


我建议阅读上面的。。。它解释了为什么一般情况下无法将其分开,但在某些特定情况下,您可以解决此问题。

如果您第一次尝试就成功了,则此类成员模板的体外定义的语法将是

template<class T>
template<class U>
int MyClass<T>::f() {
 /* ... */
}
模板
模板
int MyClass::f(){
/* ... */
}

但正如前面所指出的,在.cpp文件中不能有这样的内容-模板属于标题。

这不是链接器问题,也不是在这些链接上发现的那种问题。我的问题归根结底更多的是一个句法问题我想。。。或者这种精确的用例是不可能的(目前)?@norisknofun:他指出,一旦语法错误被修复,您就必须管理链接阶段。如果您的类型是真正的泛型,您将无法将实现隐藏到cpp中。我确认:不可能!
template<class T>
template<class U>
int MyClass<T>::f() {
 /* ... */
}