templates <int T> C++

Jam*_*len 2 c++ templates

定义模板意味着什么template <int N>,我从书中的一个例子中读到这个:

typedef map<int, double> row;
template <int N> struct matrix;
{
   map <int, row> my_matrix;
}
Run Code Online (Sandbox Code Playgroud)

我经常看到模板,然后是类,然后输入,即 template <class int>

Ker*_* SB 14

模板参数可以是三种C++实体中的任何一种:值,类型或模板:

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
Run Code Online (Sandbox Code Playgroud)

用法示例:

Foo<10> a;

Bar<int> b;

Zip<Bar> c;
Run Code Online (Sandbox Code Playgroud)

请注意,这对应于依赖名称的三种方式:

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
Run Code Online (Sandbox Code Playgroud)

当您想要"代表"一个值时,会出现一个有趣的组合.这可以这样做:

template <typename T, T Val> struct Typificate;
Run Code Online (Sandbox Code Playgroud)

现在你可以说例如Typificate<int, 10>获得一个表示整数10的唯一类型.这有时可能非常有用,例如,当它T是一个成员函数指针时(例如在这个委托实现中); 或者它可以用于为标签调度等创建值唯一的重载.

  • @JamesHallen:考虑`template <unsigned int N> struct Foo {int a [N]; };` (3认同)