模板意大利面条

2024-04-01

请解释一下那块令人困惑的模板意大利面条:

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(使用前将#替换为@)

模板意大利面条 的相关文章