C++模板参数中的未声明标识符。

问题描述 投票:0回答:1

我有一个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++类,它是一个模板参数。

c++ templates specialization partial-specialization template-templates
1个回答
2
投票

模板模板参数中的参数名称只是参考性的(作为函数指针中的参数名称)。void (*f)(int a, int b) (ab 不能使用)),你应该这样做。

template <template <typename, typename, typename> typename Operator,
          typename Param1, typename Param2, typename Param3>
void MyClass<Operator<Param1, Param2, Param3>>::FunctionName() {/*...*/}

注意,你不能对方法函数进行局部特化,你必须对整个类进行局部特化。

© www.soinside.com 2019 - 2024. All rights reserved.