模板化类方法定义语法

Posted

技术标签:

【中文标题】模板化类方法定义语法【英文标题】:Templated class method definition syntax 【发布时间】:2010-11-19 17:25:52 【问题描述】:

类定义:

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&)=&_compFunc<K> > class X ;

我想在类代码块之外定义一个类方法。像这样:

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&)=&_compFunc<K> >
X<K, V, hashFunc, compFunc>::X()  

g++ v.4.4.3 返回

错误:模板的默认参数 包含“X::X()”的类的参数

为什么编译器会抱怨,我怎样才能让它工作?

【问题讨论】:

【参考方案1】:

您没有为X 声明或定义构造函数。此外,您在尝试的 X::X 定义中重复了默认模板参数。

这是固定代码,main-ified:

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&)=&_compFunc<K> > 
class X 
 
    X();
;

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&) >
X<K, V, hashFunc, compFunc>::X()  

int main()


【讨论】:

【参考方案2】:

您不应该重复默认模板参数:

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&)>
X<K, V, hashFunc, compFunc>::X()  /* ... */ 

正如 John Dibling 所指出的,类 X 显然也必须声明构造函数,但为了清楚起见,我假设代码已被删除。

【讨论】:

以上是关于模板化类方法定义语法的主要内容,如果未能解决你的问题,请参考以下文章

在实例化类之前在 Python 类中定义的方法的正确术语是啥?

模板嵌套类方法的单独定义的正确语法

如何在模板化类的私有部分中创建模板化结构

Java方法

这是一种在 javascript 中实例化类的方法吗? [复制]

django之模板层