模板意粉

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

我该如何重新定义函数定义?

Xeo*_*Xeo 7

删除<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