使用SFINAE的C ++中的Portable typeof()?

时间:2011-05-31 06:13:38

标签: c++ templates typeof sfinae

  

可能重复:
  Absence of typeof operator in C++03?

是否可以使用模板在C ++ 0x C ++之前获取表达式可移植编译时类型?

类似的东西:

int foo() { return 0; } //Let's say we have this
typeof(foo()) x;        //x would now be of type 'int'

但由于我们正在使用模板,因此显然可能需要稍微不同的语法。

(我在这里和网上的其他地方看到了很多重复,但它们似乎依赖于特定于编译器的功能或依赖于C ++ 0x(C ++ 11?)decltype功能。)< / p>

3 个答案:

答案 0 :(得分:6)

在一般情况下,这是不可能的。是的,多年来为这个问题付出了很多努力。

在特定的情况下,确定表达式的类型有很多技巧(例如,仿函数通常使用指示其返回类型的typedef进行注释),但一般< / em>,你需要decltype,这正是它在C ++ 0x中添加的原因。标准委员会遵循一项政策,即不添加核心语言功能来完成图书馆可以做的事情。

答案 1 :(得分:1)

我不了解实施情况,但请查看Boost.Typeof

答案 2 :(得分:0)

不可能。您可以使用函数/方法执行的唯一编译时操作是sizeof(),这无助于推断类型(如typeid)。