【发布时间】:2014-12-25 18:49:02
【问题描述】:
Dr.Dobb的文章A Portable "typeof" Operator说
但是你不能使用类模板从表达式中提取类型,你可以使用函数模板或重载。 (如果表达式是具有外部链接的名称,则可以通过使用模板非类型参数来实现类模板的 typeof,但这不是很有用。)
括号中的粗体句子是否正确?如果是这样,如何使用模板非类型参数来查找具有外部链接的表达式的类型?
【问题讨论】:
-
Here's my "attempt" - 它不起作用,所以我将它作为评论发布。问题是“鸡和蛋”的问题。现在,如果你可以以某种方式推迟类型参数声明,或者你可以拥有
template<T* val>,它可以工作。 -
@milleniumbug -- c++ 在专门化之前需要模板声明,这太糟糕了。否则它可以像
template<typename T, T* V> struct<V> { typedef T type };一样工作。 -
我不认为 Dr.Dobb 文章的作者认为他可以采用像 @milleniumbug 试图做的那种表达方式,因为那不能解释它的必要性成为外部链接。
-
@qbt937 实际上,外部链接是我尝试尝试的原因,请参阅this answer, with relevant standard quote。虽然这个具体问题是关于 C++11,但据我所知,链接问题在 C++03 中也很重要。