定义模板意味着什么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
是一个成员函数指针时(例如在这个委托实现中); 或者它可以用于为标签调度等创建值唯一的重载.