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

C++ Undeclared Identifier in Template Template Parameter

我有一个 C++ class 是这样模板化的:

template <typename Operator>
class MyClass;

其中Operator也可以模板化为:

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

现在,当我尝试为 class、MyClass 编写模板化方法时,出现错误 - 此代码:

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

产生错误:"undeclared identifier" 对于每个 Param1Param2Param3 运算符 。 为什么会这样,因为 typenames/classes 是在上面指定的?

我知道示例代码没有多大意义,但我的最终目标是部分专门化它看起来像:

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

所以如果第二个Param是"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() {/*...*/}

请注意,您不能部分特化 method/function,您必须部分特化整个 class。