C++中使用SFINAE的可移植类型()

A Portable typeof() in C++ using SFINAE?

本文关键字:可移植 类型 SFINAE C++      更新时间:2023-10-16

可能重复:
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功能。)

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

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

我不知道实现,但看看Boost。类型。

这是不可能的。使用函数/方法可以执行的唯一编译时操作是sizeof(),它对推导类型(如typeid)没有帮助。