ogn*_*ian 5 c++ templates metaprogramming
请在那块令人费解的模板意大利面上点亮一些:
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;
}
Run Code Online (Sandbox Code Playgroud)
我无法提出正确的语法来定义实现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;
}
Run Code Online (Sandbox Code Playgroud)
接下来,为每个模板部件提供自己的行是有帮助的.使事情更清晰.
除此之外,函数看起来不对,或者是否AttributeType有转换构造函数T?