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

C++ Undeclared Identifier in Template Template Parameter

本文关键字:标识符 未声明 参数 C++      更新时间:2023-10-16

>我有一个C++类

,模板化如下:
template <typename Operator>
class MyClass;

其中运算符也可以模板化为:

template <typename Param1, typename Param2, typename Param3>
class MyOperator;

现在,当我尝试为类MyClass编写模板化方法时,我收到一个错误 - 以下代码:

template < template < typename Param1, typename Param2, typename Param3 > typename Operator >
void MyClass<Operator<Param1, Param2, Param3>>::FunctionName()

为参数 1、参数2参数 3和运算符中的每一个生成错误:"未声明的标识符"。为什么会这样,因为类型名/类是在上面指定的?

我知道示例代码没有多大意义,但我的最终目标是部分地将其专门化为如下所示:

template < template < typename Param1, typename Param2, typename Param3 > typename Operator >
void MyClass<Operator<Param1, "CustomParam", Param3>>::FunctionName()

因此,如果第二个参数是"CustomParam",则该函数将执行特定的实现。即使我将所有参数指定为模板参数(因为我要专用的参数是第二个参数,但第一个不是专用的(,这是否可行?谢谢!

模板模板参数中的参数名称仅提供信息(作为函数指针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() {/*...*/}

请注意,您不能部分专用化方法/函数,您必须部分专用化整个类。