【发布时间】:2012-10-18 17:59:10
【问题描述】:
可能重复:
Why should the implementation and the declaration of a template class be in the same header file?
我正在尝试在头文件中定义模板,并在 cpp 文件中定义模板,并且模板应在派生类中定义。所以这就是我得到的:
头文件:
#ifndef ........
#define .....
template <class mytypename>
class abcBaseClass:public abcDerivedClass{
public:
mytypename getvalue(char*)
};
#endif
源文件:
mytypename abcDerivedClass<mytypename>::getvalue(char* name){
}
我只是想知道这样做是否正确?
这就是我想要实现的目标......我想要拨打电话的最后一种方式是
double x = a->getvalue<double>(char)
【问题讨论】:
-
除非您显式实例化类型,否则实现必须与声明位于同一文件中。
typename也是保留字。 -
正确的做法是将整个模板定义放在表头中。
-
你真正想做什么?
typename不是模板参数的有效名称,并且在该代码中,base继承自derived,这至少是一个违反直觉的名称选择。 -
Mybad...忽略类型名...感谢大家通知我...我刚刚将其更改为 mytypename...除此之外...我只是想知道是否我是对的......我只是希望我的模板定义和声明位于单独的文件中
-
@vadugs,阅读我的解决方法(有一些缺陷)的答案。此外,Mark 的回答提供了另一种解决方法,不过需要一些额外的工作。
标签: c++