请关注一下那块令人费解的意大利面模板:
template <typename T, typename K> class A {
public:
T t;
K k;
template <int i, int unused = 0> struct AttributeType {
};
template <int i> AttributeType<i> getAttr();
};
template <typename T, typename K> template <int i> A<T, K>::AttributeType<i> A<T, K>::getAttr<i>() {
return t;
}我想不出正确的语法来定义A::getAttr()的实现。当前代码在getAttr定义行编译失败:
error: function template partial specialization ‘getAttr<i>’ is not allowed
我应该如何重新定义函数?
发布于 2011-06-04 04:09:13
删除函数名后面的<i>,并在返回类型之前添加一个typename,它是一个依赖于的名称。此外,它在AttributeType之前缺少template,因为这是一个模板:
template <typename T, typename K>
template <int i>
typename A<T, K>::template AttributeType<i> A<T, K>::getAttr() {
return t;
}接下来,为每个模板部分指定自己的行是很有帮助的。让事情变得更清晰。
除此之外,函数看起来是错误的,或者AttributeType有来自T的转换构造函数
https://stackoverflow.com/questions/6232085
复制相似问题