如何找到函数的返回类型?

时间:2011-04-15 12:51:05

标签: c++

所以__FUNCTION__告诉我们当前函数的名称。函数的返回类型是否有类似的宏?

4 个答案:

答案 0 :(得分:4)

由于您已经使用了Visual-C ++特定的__FUNCTION__宏,因此您可以查看__FUNCSIG__宏 - 它会扩展为完整的签名,然后您可以解析并提取返回类型。在Visual C ++中没有宏可以做到这一点。

答案 1 :(得分:2)

如果您在预处理时间不需要它:
在C ++ 0x中,您可以使用decltype(myFunc(dummyparams)),它代表返回类型myFunc(编译时)。
如果您现在想要一个字符串,请启用RTTI(运行时类型信息)并使用typeid().name()(运行时):

#include <typeinfo>

double myFunc(){
  // ...
  return 13.37;
}

int main(){
  typedef decltype(myFunc()) myFunc_ret;
  char const* myFunc_ret_str = typeid(myFunc_ret).name();
}

但请注意,myFunc_ret_str并不总是返回类型的干净名称 - 它取决于编译器如何实现typeid

答案 2 :(得分:1)

查看函数本身,您可以知道返回类型。毕竟,MACRO甚至在编译时之前工作,这意味着,当你编写MACRO时,只有在你看它时才知道函数的返回类型。

如果我告诉您可以使用__FUNCSIG__,那么即使这样,您在代码中使用它时也会知道返回类型。

但是如果您需要在模板编程中了解它,那么我建议您查看:decltype

答案 3 :(得分:1)

C ++ 11:

template < typename R, typename ...Args >
char const* FunctionReturnTypeAsString( R foo(Args...) ) {
  return typeid(R).name()
}