类的模板形参,该类也是模板形参
Template parameter for a class which is also a template parameter
本文关键字:形参 更新时间:2023-10-16
我试着这样做,我认为这个例子应该是不言自明的:
template <class CLASS, class PARAM>
void call(){
CLASS<PARAM>::do_something();
}
在第3行CLASS和PARAM之间的尖括号中,编译器说:
错误:expected unqualified-id
我可以解决这个问题还是不允许我尝试做什么?
template <
template <typename T> class CLASS,
typename PARAM>
void call()
{
CLASS<PARAM>::do_something();
}
模板参数CLASS
声明为class
或typename
,即类型的名称。
template<typename X> struct A;
这里A
不是一个类型,它是一个模板。要获得一个类型,您需要"应用"(*)模板:A<int>
。
如果你写CLASS<PARAM>
,你试图将一个类型应用于一个类型。这行不通。这就像试图调用一个值42(parameter)
,只是在类型级别。
所以你需要指定CLASS
是可以应用的东西,它是一个模板:
template <typename T> class CLASS
因此,作为参考,完整的解决方案是:
template <template <typename T> class CLASS, class PARAM>
void call(){
CLASS<PARAM>::do_something();
}
(*)模板是类型级别的函数:它接受一个或多个类型,并返回一个新类型。
除了@DanielJour和@Nasser给出的答案外,我想提一下,模板模板参数CLASS
的类型名的名称T
可以省略,因为它没有被使用。所以,浓缩溶液看起来是这样的:
template <template <typename> class CLASS, typename PARAM>
void call()
{
CLASS<PARAM>::do_something();
}
相关文章:
- 使用mem_fun_ref if成员函数需要多个形参
- 通过类的模板形参特化成员模板结构
- 非类型引用形参/实参
- 哪个模板形参在boost::shared_ptr构造函数中使用一个原始指针
- 如何确保迭代器模板形参与模板类的模板形参具有相同的数据类型
- 如何在编译时通过模板形参默认值的名称/指针获取函数的类型
- c++:候选模板被忽略:模板形参显式指定的参数无效
- c++中作为形参的指针
- 哪种方法更适合为函数提供编译时间常数?函数实参与模板形参
- 包含void*结构的函数的Const正确性和形参
- 传递boost::函数,该函数接受一个模板实参作为默认为NULL的形参
- 将右值引用形参强制转换为右值引用
- 给引用形参赋值使对象无效
- 当实参是初始化列表而形参是引用时,重载解析
- const整型模板形参的条件
- 使用作为模板形参提供的基类成员,不带限定符
- 模板类的不同返回类型取决于类的形参
- 模板形参有二义性:无法推断模板实参
- 是否有必要在定义中使用模板形参来引用同一个类?
- c++ std::find()和模板形参