我有一个C++类,是这样模板化的。
template <typename Operator>
class MyClass;
其中 运营商 也可以将自己模板化成。
template <typename Param1, typename Param2, typename Param3>
class MyOperator;
现在,当我试图为这个类写一个模板化的方法时, 我的班级我得到一个错误 - 这个代码。
template < template < typename Param1, typename Param2, typename Param3 > typename Operator >
void MyClass<Operator<Param1, Param2, Param3>>::FunctionName()
产生错误: "undeclared identifier "为每一个 Param1, Param2, Param3 和 运营商. 为什么会这样,因为上面已经指定了typenamesclasses?
我知道这个例子的代码没有那么大的意义,但是我的最终目标是将其部分特殊化,使其看起来像这样。
template < template < typename Param1, typename Param2, typename Param3 > typename Operator >
void MyClass<Operator<Param1, "CustomParam", Param3>>::FunctionName()
所以如果第二个Param是 "CustomParam",函数就会执行一个特定的实现。即使我把所有的参数都指定为模板参数(因为我想特殊化的参数是第二个参数,但第一个参数没有特殊化),这样做是否可行?谢谢!我有一个C++类,它是一个模板参数。
模板模板参数中的参数名称只是参考性的(作为函数指针中的参数名称)。void (*f)(int a, int b)
(a
和 b
不能使用)),你应该这样做。
template <template <typename, typename, typename> typename Operator,
typename Param1, typename Param2, typename Param3>
void MyClass<Operator<Param1, Param2, Param3>>::FunctionName() {/*...*/}
注意,你不能对方法函数进行局部特化,你必须对整个类进行局部特化。