std :: map emplace с ключом, полученным при построении значения - PullRequest
0 голосов
/ 01 мая 2020

Предположим, у нас есть карта с некоторыми сложными объектами, текстурами в моем случае.

std::map<unsigned int, Texture> _table;

Что было бы наиболее правильным способом вставить объект в такую ​​карту с помощью ключ, который получается при построении значения (текстуры)?

Скажем, у нас:

Texture::Texture() { glGenTextures(1, &_id); }
Texture::~Texture() { glDeleteTextures(1, &_id); }

glGenTextures() предоставляет новый идентификатор OpenGL в элемент данных класса _id. glDeleteTextures() освобождает ресурсы и делает недействительными _id. Итак, я хотел бы избежать любых промежуточных объектов и копирования.

И после этого я хочу сохранить эту вновь созданную текстуру в моей _table.

Texture tex;
_table.insert({tex._id, tex});

Я бы предпочел использовать здесь emplace , но я не уверен, что возможно / безопасно построить текстуру и использовать _id для использования для вставки карты в той же строке.

Что касается меня, это выглядит как шаблон, который, вероятно, должен существует.

В противном случае, почему я не должен делать ничего подобного?

...