gpt4 book ai didi

C++ std::map Initlializator 列表失败

转载 作者:行者123 更新时间:2023-11-28 02:57:58 25 4
gpt4 key购买 nike

   std::map <ODParserETag ,std::function<void()>> procedure_map;

procedure_map = { {ODParserETag::ActorListETag, onUndefinedTag }, {ODParserETag::AdvancedWorkerETag, onUndefinedTag }, {ODParserETag::animationETag, onUndefinedTag }};

失败并出现错误:

/usr/include/c++/4.8/bits/stl_map.h:300:7: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘std::initializer_list<std::pair<const ODParserETag, std::function<void()> > >’

并且 onU-T* 是无效的 ODParserXml::onUndefinedTag();

是否有任何 map 容器会为每个键返回一些默认预设值? (如本例中的 onUndefinedTag() )...?

最佳答案

成员函数不是函数,因为您只能用对象调用它们。

一个捷径是使用 lambda 函数:

ODParserXml parser (...);
....

procedure_map[ODParserETag::ActorListETag] = [&] { parser.onUndefinedTag(); };

另见


这是一些用于修补的代码(参见 http://ideone.com/iIEIiC ):

#include <iostream>
#include <map>
#include <functional>

int main() {
std::map<int, std::function<void()>> funs;
funs[0] = [] { std::cout << "0\n"; };
funs[1] = [] { std::cout << "1\n"; };

funs[0]();
funs[1]();
funs[0]();
return 0;
}

关于C++ std::map Initlializator 列表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21554897/

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