首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模版意大利面

模版意大利面
EN

Stack Overflow用户
提问于 2011-06-04 04:06:18
回答 1查看 308关注 0票数 5

请关注一下那块令人费解的意大利面模板:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-04 04:09:13

删除函数名后面的<i>,并在返回类型之前添加一个typename,它是一个依赖于的名称。此外,它在AttributeType之前缺少template,因为这是一个模板:

代码语言:javascript
复制
template <typename T, typename K>
template <int i>
typename A<T, K>::template AttributeType<i> A<T, K>::getAttr() {
    return t;
}

接下来,为每个模板部分指定自己的行是很有帮助的。让事情变得更清晰。

除此之外,函数看起来是错误的,或者AttributeType有来自T的转换构造函数

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6232085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档