这在C ++模板中意味着什么?

时间:2014-07-06 19:12:01

标签: c++ templates

说我们有以下内容:

template <class T, int i>

我理解T将是传递给某个函数的任何类型。但是,int i部分是什么意思?

感谢。

2 个答案:

答案 0 :(得分:2)

此类模板类语法最常见的用例之一是提供一些固定大小的T来处理:

template<typename T, size_t N>
class MyClass {
    std::array<T,N> theHandledInstancesOfT;
};

MyClass<int,42> my42IntegersManagedByMyClass;    

例如,另请参阅std::array<> documentation

答案 1 :(得分:0)

让我们比较两个函数,一个是模板而另一个没有:

int add_two(int x, int y) {
    return (x + y);
}
// add_two(3, 4) == 7

template <int x, int y>
int add_two_2() {
    return (x + y);
}
// add_two_2<3, 4>() == 7

在模板化版本中,xy的值在编译时已知。这意味着编译器可以看到x = 3y = 4表示结果为7,并且只用7替换整个函数调用。但是,在第一个函数中,这样的事情是不可能的,因为编译器在实际运行程序之前不知道xy的值。