templates <int T> C++
c++, non-type-template-parameter, templates
Solution
Template parameters may be of any of the three kinds of C++ entities: values, types, or templates:
template <int N> struct Foo; // N is a value
template <typename T> struct Bar; // T is a type
template <template <typename> class X> struct Zip; // X is a template
Example usage:
Foo<10> a;
Bar<int> b;
Zip<Bar> c;
Note that this corresponds to the three ways of disamiguating dependent names:
X::a = 10; // X::a is a value
typename X::B n = 10; // X::B is a type
X::template C<int> m; // X::C is a template
An interesting combination arises when you want to "typify" a value. This can be done like so:
template <typename T, T Val> struct Typificate;
Now you can say e.g. `Typificate<int, 10>` to get a unique type that represents the integer 10. This can occasionally be very useful, e.g. when `T` is a member function pointer (e.g. in this delegate implementation); or it can be used to create value-unique overloads for tag dispatch, etc.
Problem
What does it mean to define a template with `template <int N>`, I read this from an example in a book: ``` typedef map<int, double> row; template <int N> struct matrix; { map <int, row> my_matrix; } ``` I have usually seen templates which are followed by class and then type, i.e. `template <class int>`