gpt4 book ai didi

c++ - 如何在C++中有条件地编写依赖于lambda返回类型的代码?

转载 作者:行者123 更新时间:2023-12-03 07:09:06 25 4
gpt4 key购买 nike

我有为每个迭代的元素调用回调的函数:

#include <type_traits>
#include <iostream>
using namespace std;

void iterate( const auto & on_element ) {
for ( int i = 0; i < 10; ++ i ) {
//here I want to stop iteration if function returns bool true:
if constexpr ( is_same< result_of( on_element )::type, bool >::value )
if ( ! on_element( i ) )
return;
//but when callback doesn't return bool - simply iterate the whole range:
else
on_element( i );
}
}

int main() {
const auto & stop = [&]( const int & element ) {
cout << "stop" << endl;
return false;
};
iterate( stop );

const auto & whole = [&]( const int & element ) {
cout << " " << element << endl;
};
cout << "Whole:" << endl;
iterate( whole );
}
我用 g++-10 -std=gnu++2a -fconcepts main.cpp -o main编译它并得到以下错误:
main.cpp: In function ‘void iterate(const auto:1&)’:
main.cpp:7:69: error: wrong number of template arguments (1, should be 2)
7 | if constexpr ( is_same< result_of( on_element )::type, bool >::value )
| ^
In file included from main.cpp:1:
/usr/include/c++/10/type_traits:582:12: note: provided for ‘template<class, class> struct std::is_same’
582 | struct is_same;
| ^~~~~~~
main.cpp:7:78: error: qualified-id in declaration before ‘)’ token
7 | if constexpr ( is_same< result_of( on_element )::type, bool >::value )
| ^
main.cpp: In instantiation of ‘void iterate(const auto:1&) [with auto:1 = main()::<lambda(const int&)>]’:
main.cpp:21:20: required from here
main.cpp:8:30: error: could not convert ‘(& on_element)->main()::<lambda(const int&)>(i)’ from ‘void’ to ‘bool’
8 | if ( ! on_element( i ) )
| ~~~~~~~~~~^~~~~
| |
| void
main.cpp:8:30: error: in argument to unary !
在我设法对函数返回值进行推理之前,但是在这种情况下无法达到目的。是由于可调用的lambda还是由于使用了 auto限定词?

最佳答案

on_node在您的示例中不是名称,并且std::result_of不具有该语法(不建议使用std::invoke_result)。
我想你是说

std::is_same_v<std::invoke_result_t<decltype(on_element), int>, bool>

关于c++ - 如何在C++中有条件地编写依赖于lambda返回类型的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63881320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com