如何在变量容器上使用stl算法



我有一个变量容器。中有3种不同的类型共享相同接口的容器。我想使用某些算法,如find_if和accumulate。

struct Type1{bool hasField(const string& name)const{return false;}};
struct Type2{bool hasField(const string& name)const{return false;}};
struct Type3{bool hasField(const string& name)const{return true;}};
struct Type4{bool hasField(const string& name)const{return false;}}; 
auto cont = vector<variant<Type1,Type2,Type3>>{Type1{},Type3{},Type2{}};
string name{"field1"};
//each type has hasField member.
auto it = find_if(begin(cont), end(cont), [&name](const auto& field)
{std::visit([](const auto& arg){return arg.hasField(name);}, field);});
//another ex:
return std::accumulate(begin(m_fields), end(m_fields), 0, 
[](size_t tot, const auto& field){
visit([&](const auto& f){return tot += f.getSize();}, field);});

linux-gnu/include/c++/8.3.0/bits/predefined_ops.h:283:11: error: 
void value not ignored as it ought to be
{ return bool(_M_pred(*__it)); }

有人能告诉我这个词的正确语法是什么吗?我试着到处搜索,但没有找到任何例子。

您的第一个例子就差不多了。这编译:

auto it = find_if(
begin(cont),
end(cont),
[&name](const auto& field) {
return std::visit(
[&name](const auto& arg){return arg.hasField(name);}, field
);
}
);

相关内容

  • 没有找到相关文章

最新更新