c++ - 提取函数的返回类型而不调用它(使用模板?)

标签 c++ templates c++11 metaprogramming

我正在寻找一种在 C++ 中提取函数返回类型的方法(无需调用它)。我想这需要一些模板魔法。

float Foo();
int Bar();

magic_template<Foo>::type var1; // Here 'var1' should be of type 'float'
magic_template<Bar>::type var2; // and 'var2' should be of type 'int'

我目前正在研究如何实现 magic_template,但到目前为止还没有找到解决方案。

有什么想法吗?

最佳答案

看看 boost type traits图书馆,特别是 function_traits模板提供开箱即用的此类功能。如果您不能使用 boost,只需下载代码并阅读源代码以深入了解它是如何完成的。

请注意,功能是基于类型的,而不是具体的函数,因此您可能需要在那里添加一些额外的代码。


在做了一些小测试之后,这可能不是您真正需要的,如果是,“一些额外的代码”将是非常重要的。问题在于 function_traits 模板适用于函数签名而不是实际的函数指针,因此问题已从“从函数指针获取返回类型”变为“从函数指针获取签名”这可能是那里最难的部分。

关于c++ - 提取函数的返回类型而不调用它(使用模板?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2005794/

相关文章:

c++ - 非类型(引用)模板参数和链接

c++ - 检测模板化 operator() 的限定符

c++ - std::vector emplace_back 可以从 vector 本身的元素复制构造吗?

c++ - 我无法用 wcout 输出字符串

c++ - 使用 makefile 隐藏 clang 警告

c++ - 从结构写入文件时的额外字符

c++ - 为什么 `std::common_type_t<std::ostream &, std::ostream &>` 等于 `std::ostream` 而不是 `std::ostream &` ?

c++ - 当我创建一个模板时,我尝试使用它但是得到一个错误(C2668)和 IntelliSense 错误

c++ - 服务器如何存储客户端的IP地址?

c++ - 使用 make_shared 和 make_unique 时需要检查 nullptr 吗?