我有一个非类型的模板类:
template<int N> class MyClass; // prototype
通用模板功能:
template<class T> Parameters validParams(); // prototype
在模板化函数中使用非类型模板化类的正确语法是什么?如果我不使用模板化类,那么正确的语法是:
template<> Parameters validParams<MyClass>(); // prototype
我已经环顾四周试图弄清楚语法应该在这里,任何帮助表示赞赏!如果它是以下内容对我来说最有意义,但它不是......
template<> Parameters validParams<MyClass<int>>();
使用此代码,我收到以下错误:
expected a constant of size 'int', got 'int'
答案 0 :(得分:2)
template<> Parameters validParams<MyClass<int>>();
应该像
template<> Parameters validParams<MyClass<42>>();
// ^^
答案 1 :(得分:0)
看看here.
MyClass<int>
不是类型(MyClass<42>
,例如,is),而函数需要类型(类)的名称作为参数。为了能够将模板作为其模板参数,语法必须遵循:
template<template<typename> class T> Parameters validParams();
答案 2 :(得分:0)
MyClass
是一个类模板,其模板参数是一个值,而不是一个类型。
MyClass<0>
是该模板的有效实例,可以生成一个类。
MyClass<int>
不是该模板的有效实例。
因此,该行
template<> Parameters validParams<MyClass<int>>();
无效。有效用途是:
template<> Parameters validParams<MyClass<0>>();
或
template<> Parameters validParams<MyClass<X>>();
只要X
是编译时常量。