没有"typename"或"class"的c ++模板

Mat*_*Mat 4 c++ templates typename

我习惯写这样的模板:

template<typename T>
void someFunction(SomeClass<T> argument);
Run Code Online (Sandbox Code Playgroud)

但是 - 现在我在另一个写成这样的线程中遇到了模板:

template<U>
void someFunction(SomeClass<U> argument);
Run Code Online (Sandbox Code Playgroud)

据我所知,可以互换地使用"typename"和"class"(除了有关嵌套类型的一些细节......).但如果我不在括号中放一个关键字,这意味着什么呢?

谢谢!

有问题的线程: 为智能指针编写复制构造函数的问题

ken*_*ytm 13

那段代码错了(拼写错误).必须有typenameclass在这种情况下.


但是,这并不意味着所有模板参数都必须以typename/ 开头class.这是因为除了类型之外,模板参数也可以是整数常量,因此以下代码可以工作:

// template <int n>, but n is not used, so we can ignore the name.
template <int>
void foo(std::vector<int>* x) {
}

int main () {
  foo<4>(0);
}
Run Code Online (Sandbox Code Playgroud)

以下是:

typedef int U;

// template <U n>, but n is not used, so we can ignore the name.
template <U>
void foo(std::vector<U>* x) {
}

int main () {
  foo<4>(0);
}
Run Code Online (Sandbox Code Playgroud)

这就是我U在评论中询问是否为typedef的原因.

  • @Mat:如果确实使用了“n”,我们可以执行编译时计算。在不太有利的设置中,我们可以使用整数来表示数组大小 `template&lt;class T, int n&gt; struct Foo { T foo[n]; ... };` (2认同)