Предположим, у нас есть карта с некоторыми сложными объектами, текстурами в моем случае.
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
для использования для вставки карты в той же строке.
Что касается меня, это выглядит как шаблон, который, вероятно, должен существует.
В противном случае, почему я не должен делать ничего подобного?