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

问题描述 投票:2回答:1

我一直在尝试找出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>;

有什么建议吗?

c++ lambda types c++17
1个回答
1
投票

您应删除invoke_result周围多余的括号,并从type中获取invoke_result,并从value中获取is_same。 e.g。

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

© www.soinside.com 2019 - 2024. All rights reserved.