Я хочу иметь std::unordered_map<std::string,MyClass*()>
переменная. Но — когда я пытаюсь создать экземпляр этого, я получаю сообщение об ошибке, глубоко внутри, которое по сути:
/usr/include/c++/4.9/bits/stl_pair.h(102): error: a function type is not allowed here
detected during:
instantiation of class "std::pair<_T1, _T2> [with _T1=const std::string, _T2=MyClass *()]"
Я уверен, что это не из-за моей ошибки. Я просмотрел сайт и заметил ссылку на Выпуск LWG 2051
изготовление std::pair
слишком ограничительный Это действительно то, что я вижу? Если так, что я должен сделать, чтобы обойти это? Используйте класс-оболочку без данных и operator()
может быть? std::function
?
Если вы хотите иметь карту из строки в MyClass
указатель, вы должны объявить:
std::unordered_map<std::string,MyClass*> x;
Но если вы хотите иметь карту указатель на функцию на функцию, возвращающую указатель на MyClass
Вы могли бы рассмотреть:
std::unordered_map<std::string,MyClass*(*)()> x;
Других решений пока нет …