【发布时间】:2011-06-03 20:06:17
【问题描述】:
请对那块莫名其妙的模板意大利面有所了解:
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
我应该如何改写函数定义?
【问题讨论】:
-
作为附注,而不是答案,如果您定义模板的成员,而不是将它们拉到模板之外,事情通常会简单得多定义。也就是说,如果
getAttr被定义在它被声明的地方会简单得多。
标签: c++ templates metaprogramming