std :: map :: emplace () отсутствует - устаревшие библиотеки? - PullRequest
7 голосов
/ 23 января 2012

Я пытаюсь использовать функцию emplace () карты в C ++ 11, но NetBeans говорит, что у карты нет такой функции. Если посмотреть на заголовки, то это «правильно» - в Fedora 16 нет упоминания emplace (). Это все хорошо, вы знаете ... но я хочу использовать emplace ().

Как мне включить эту функцию? Я точно знаю, что он существует с марта прошлого года, возможно, раньше. Тщательный поиск показывает, что emplace () в основном существует только в моей системе в заголовках для списков и векторов. Поскольку в течение почти десятилетия не было серьезной версии C ++, мне не повезло найти документацию о том, что делать, если библиотеки «неправильны».

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Если ваша реализация не поддерживает что-то, у вас есть два варианта:

  • не использовать функцию
  • использовать другую реализацию, которая поддерживает то, что вам нужно.

Тот факт, что существует новый стандарт, не расширяет выбор.Фактически, это уменьшает его, поскольку у вас возникнут дополнительные трудности в поиске реализации, которая поддерживает все, что вы хотите для каждой цели.

Обратите внимание, что для чисто библиотечных вещей другая реализация может быть той, которую вы делаетеСовместимость обертки имеют повышенный внешний вид во время перехода.Но вы должны обратить внимание на эффекты столкновения имен (видимость упаковщиков совместимости может добавить неоднозначности к коду, когда функция появится на своем стандартном месте).

1 голос
/ 19 сентября 2014

GCC 4.7 не поддерживает это, поскольку в то время были нерешенные проблемы со стандартом.Это реализовано в 4.8 и выше.Вам понадобится -std = c ++ 11

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...