0

可能重复:
C++03 中缺少 typeof 运算符?

是否可以使用模板在 pre-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功能。)

4

3 回答 3

6

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

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

于 2011-05-31T06:44:09.427 回答
2

我不知道实现,但看看Boost.Typeof

于 2011-05-31T06:33:33.830 回答
0

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

于 2011-05-31T06:34:38.963 回答