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 * void ODParserXml :: onUndefinedTag();
Есть ли какой-либо контейнер карты, который бы возвращал определенное значение по умолчанию для каждого ключа? (например, onUndefinedTag() в этом примере)...?
Функции-члены не являются функциями, так как их можно вызвать только с помощью объекта.
Коротким маршрутом было бы использование лямбда-функции:
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;
}
std::function
std::initializer_list
/std::function
, вы можете видеть, что это C ++ 11. @paul есть ли шанс, чтоonUndefinedTag
является нестатической функцией-членом класса?