将模板化类传递给模板化函数

时间:2017-07-19 22:00:43

标签: c++ function class templates non-type

我有一个非类型的模板类:

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'

3 个答案:

答案 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是编译时常量。