是否可以使用模板在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>
答案 0 :(得分:6)
在一般情况下,这是不可能的。是的,多年来为这个问题付出了很多努力。
在特定的情况下,确定表达式的类型有很多技巧(例如,仿函数通常使用指示其返回类型的typedef进行注释),但一般< / em>,你需要decltype
,这正是它在C ++ 0x中添加的原因。标准委员会遵循一项政策,即不添加核心语言功能来完成图书馆可以做的事情。
答案 1 :(得分:1)
我不了解实施情况,但请查看Boost.Typeof。
答案 2 :(得分:0)
不可能。您可以使用函数/方法执行的唯一编译时操作是sizeof()
,这无助于推断类型(如typeid
)。