繁体   English   中英

没有“typename”或“class”的c ++模板

[英]c++ templates without “typename” or “class”

我习惯写这样的模板:

template<typename T>
void someFunction(SomeClass<T> argument);

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

template<U>
void someFunction(SomeClass<U> argument);

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

谢谢!

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

那段代码错了(拼写错误)。 在这种情况下必须有一个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);
}

以下是:

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);
}

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

我认为这只是一个错误的人要求忘记添加“typename”或“class”。 答案只是复制/粘贴代码,这也很糟糕。

我敢肯定你是一个宏。 我不认为仅仅使用typedef代替U,因为编译器必须在括号中看到两个关键字“class”或“typename”中的任何一个才能编译模板。

把'U'放在那里的人对自己的好处有点太聪明了。 因此你的困惑。

欢迎来到维护其他人的脏代码的世界。

如果U是一个类型,那么这是一个模板专门化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM