Templates 如何在cpp文件中实现成员函数MyClass<;T>;::我的会员<;U>;?
我试图将模板化类MyClass的模板化成员函数f的实现放在.cpp中(出于安全原因):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() 没有任何效果,反复出现的错误消息是:“非法使用显式模板参数”简短的回答是(大部分情况下)您不能这样做 实际上,这可能是一个重复的问题,请参见:
templateclass MyClass
{
公众:
模板intf()
{
/* ... */
返回0;
}
};
如何将f()代码放入.cpp文件中(而不是留在头文件中)
我尝试了很多事情:
模板非法使用显式模板参数”简短的回答是(大部分情况下)您不能这样做
实际上,这可能是一个重复的问题,请参见:
另一个有用的来源:
我建议阅读上面的。。。它解释了为什么一般情况下无法将其分开,但在某些特定情况下,您可以解决此问题。如果您第一次尝试就成功了,则此类成员模板的体外定义的语法将是
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() {
/* ... */
}