请解释一下那块令人困惑的模板意大利面条:
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
before AttributeType
因为那是一个模板:
template <typename T, typename K>
template <int i>
typename A<T, K>::template AttributeType<i> A<T, K>::getAttr() {
return t;
}
接下来,为每个模板部分提供自己的行会很有帮助。让事情变得更清晰。
除此之外,该函数看起来错误,或者确实如此AttributeType
有一个转换构造函数T
?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)