c++ - 如何比较 C++ 中 lambda 函数的返回类型?

标签 c++ lambda types c++17

我一直在尝试找出 lambda 表达式的返回类型,以了解该函数是否返回 void

我的第一个想法是使用 std::invoke_result,但是它没有按预期工作,因为它不能与 std::is_same 一起使用,后者需要两种类型。

这是我一直在尝试的

auto lamb = [] ( int x ) { cout << x << endl; };
is_same<(invoke_result<decltype(lamb),int>),void>;

错误是:

 trabapply2.cc:32:50: error: template argument 1 is invalid
 is_same<(invoke_result<decltype(lamb),int>),void>;

有什么建议吗?

最佳答案

您应该删除 invoke_result 周围多余的括号,并从 invoke_result 获取 type,并从 invoke_result 获取 value is_same。例如

is_same<invoke_result<decltype(lamb), int>::type, void>::value // gives true or false

is_same_v<invoke_result_t<decltype(lamb), int>, void> // since C++17

LIVE

关于c++ - 如何比较 C++ 中 lambda 函数的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126490/

相关文章:

c# - 创建一个通用(但在声明时键入)表达式数组

python - 我可以在 Python 中使用 "static"变量的匿名函数吗?

c++ - 生成随机但不重复的数字 (C++)

c++ - 如何将表示指数形式的十进制数的字符串转换为 Qt 中的 float ?

c# - 我在哪里标记 lambda 表达式异步?

jquery - Cufon 嵌套悬停问题

scala - 如何修复喷雾示例的编译错误?

c++ - Win7命名空间扩展确定IShellItem是文件还是文件夹

c++ - 当我打印到屏幕或文件时,Expat 打印出垃圾

haskell - 我可以完全禁用 GHC 上的类型检查,以便将其用作函数式语言的编译目标吗?