Я поражаю проблему stl :: pair 2051, если я использую указатель функции в качестве значения пары?

Я хочу иметь 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?

1

Решение

Если вы хотите иметь карту из строки в MyClass указатель, вы должны объявить:

 std::unordered_map<std::string,MyClass*> x;

Но если вы хотите иметь карту указатель на функцию на функцию, возвращающую указатель на MyClass Вы могли бы рассмотреть:

std::unordered_map<std::string,MyClass*(*)()> x;
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]