2017-07-19 152 views
0

我有一個非類型模板類:通行證模板類模板函數

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

順便說一下,用我猜測的MyClass 語法,我得到一個錯誤,如「期望一個常量大小'int',得到'int'」 – April

回答

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

應該是這樣的

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

看看here.

MyClass<int>不是一個類型(例如,是MyClass<42>),而函數需要類型(類)的名稱作爲參數。爲了使它能夠採取模板模板參數,語法必須如下:

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

MyClass是一個類模板,其模板參數是一個值,而不是一個類型。

MyClass<0>該模板的有效實例化導致類。
MyClass<int>不是該模板的有效實例化。

因此,線

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

無效。一個有效的使用將是:

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

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

只要X是一個編譯時間常數。