使用gcc中的"typeof"运算符检索函数返回的类型

pep*_*er0 4 c++ gcc typeof

我们可以使用typeof运算符获取gcc中函数返回的类型,如下所示:

typeof(container.begin()) i;
Run Code Online (Sandbox Code Playgroud)

是否有可能做一些类似的功能采取一些参数,但不给它们?例如,当我们有功能:

MyType foo(int, char, bool, int);
Run Code Online (Sandbox Code Playgroud)

我想检索这个"MyType"(可能使用typeof运算符),假设我只知道函数的名称("foo"),并且不知道它所采用的参数.可能吗?

Kel*_*nch 5

在C++中,返回值的类型不是方法签名的一部分.即使有办法获得方法的返回类型,您也必须处理获取多个方法的可能性,而不知道哪个方法具有您想要的返回类型.

  • 虽然它不是签名的一部分,但它是该类型的一部分.例如,你不能将`int(*)(void)`赋给`float(*)(void)`. (2认同)

Mik*_*our 5

typeof 是非标准扩展名,因此如果您希望代码可移植,请不要使用它.

它的语法是typeof(expression),所以你需要给它一个调用函数的表达式(因此它的类型MyType),如下所示:

typeof(foo(int(),char(),bool(),int()))
Run Code Online (Sandbox Code Playgroud)

  • +1.值得指出的是,这个表达式是一个所谓的"未评估的上下文",就像没有评估sizeof的表达式一样. (2认同)