2017-07-19 8 views
0

私は非型テンプレートクラスを持っている:パステンプレートクラス

template<int N> class MyClass; // prototype 

と汎用テンプレート機能:非型テンプレートを使用する正しい構文は何

template<class T> Parameters validParams(); // prototype 

テンプレート関数のクラス?私はテンプレートクラスを使用しない場合は、正しい構文は次のとおりです。私は構文はここにあるべきかを理解しようとするビットの周りに見てきた

template<> Parameters validParams<MyClass>(); // prototype 

、任意のヘルプは大歓迎です!以下のようなものであるべき

expected a constant of size 'int', got 'int' 
+0

ところで、私が推測するMyClass の構文では、「intの定数が予想され、intが「予想される」のようなエラーが発生します」 – April

答えて

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

:私は次のエラーを取得するこのコードでは、それは次のようだった場合、それは私にはほとんど意味をなさないと思いますが、そうではありません...

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は、コンパイル時定数であるとして。