【问题标题】:retrieving type returned by function using "typeof" operator in gcc在 gcc 中使用“typeof”运算符检索函数返回的类型
【发布时间】:2009-11-09 17:58:11
【问题描述】:

我们可以使用typeof操作符在gcc中获取函数返回的类型,如下:

typeof(container.begin()) i;

是否可以对带有一些参数但不给它们的函数做类似的事情?例如。当我们有函数时:

MyType foo(int, char, bool, int);

我想检索这个“MyType”(可能使用 typeof 运算符)假设我只知道函数的名称(“foo”)并且不知道它需要的参数。有可能吗?

【问题讨论】:

  • 这似乎不可能。此外,如果“foo”有返回不同类型的重载呢?

标签: c++ gcc typeof


【解决方案1】:

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

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

typeof(foo(int(),char(),bool(),int()))

【讨论】:

  • +1。值得指出的是,这个表达式是所谓的“未计算上下文”,就像 sizeof 的表达式没有被计算一样。
【解决方案2】:

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

【讨论】:

  • 虽然它不是签名的一部分,但它类型的一部分。例如,您不能将 int (*)( void ) 分配给 float (*)(void)
【解决方案3】:

C++0x 将使用decltypeauto 关键字引入Type inference
在 C++ 中,您可以使用 typeof(由 Mike Seymour 建议)或 SFINAE 原则。

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2019-12-13
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多