【发布时间】:2016-07-01 15:11:08
【问题描述】:
我有一个表单的模板类:
template<typename ContainerType>
class ConfIntParamStat {
public:
typedef typename ContainerType::Type Type;
...
private:
void sample(int iteration) {...}
}
我想为 ContainerType 是 Vector 的情况创建一个特定版本的函数示例。其中Vector本身是一个模板类,但我不知道这个Vector持有哪种类型的值。
我的直觉是在头文件中创建这个:
template<typename Type>
ConfIntParamStat<Vector<Type> >::sample(int iteration) {
...
}
但它没有编译,并且来自clang的错误是:
error: nested name specifier 'ConfIntParamStat<Vector<Type> >::' for declaration does not refer into a class, class template or class template partial specialization
是否可以使用其他语法?
【问题讨论】:
-
您不能专门化模板类的一个成员。你必须专攻整个班级。如果你真的只想专门化一个成员,那么创建一个类成员函数调用的辅助函数并重载或专门化它。
-
你能用
if (std::is_same<Type, Vector::Type>::value)分支你的sample吗? (假设Vector中有Type) -
@DarkFalcon:准点。我可能会通过说“您不能部分专门化模板类的一个成员”来修改您的评论。如果您完全专业化它,那么它将起作用。编辑:example
标签: c++ templates metaprogramming