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

Pass templated class to templated function

本文关键字:函数      更新时间:2023-10-16

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

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'
template<> Parameters validParams<MyClass<int>>();

应该是这样的

template<> Parameters validParams<MyClass<42>>();
// ^^

看看这里。

MyClass<int>不是类型(例如,MyClass<42>是(,而函数需要一个类型(类(的名称作为参数。为了使它能够将模板作为其模板参数,语法必须如下:

template<template<typename> class T> Parameters validParams();

>MyClass是一个类模板,其模板参数是值,而不是类型。

MyClass<0>生成类的该模板的有效实例化。MyClass<int>不是该模板的有效实例化。

因此,这条线

template<> Parameters validParams<MyClass<int>>();

无效。有效用途是:

template<> Parameters validParams<MyClass<0>>();

template<> Parameters validParams<MyClass<X>>();

只要X是编译时常量。