请解释一下那 block 令人费解的模板意大利面:
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
我应该如何改写函数定义?
最佳答案
删除<i>
在函数名后面加上一个typename
在返回类型之前,它是一个相关名称。此外,它缺少一个 template
之前 AttributeType
因为那是一个模板:
template <typename T, typename K>
template <int i>
typename A<T, K>::template AttributeType<i> A<T, K>::getAttr() {
return t;
}
接下来,给每个模板部分单独一行会很有帮助。使内容更清晰。
除此之外,该函数看起来不对,或者 AttributeType
有一个来自 T
的转换构造函数?
关于c++ - 模板意大利面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6232085/