Я работаю над менеджером ресурсов для своего игрового движка, и для добавления нового актива требуется несколько повторений. Требуется 4 вещи: контейнер, функция загрузки и две функции получения, поэтому для 4 ресурсов (например, сетка, текстура, Шейдер, Аудио) — это 16 вещей, которые нужно добавить. Я не думаю, что я могу что-то сделать с функциями загрузки, но с другой стороны, функции получения, по сути, такие же: они ищут карту с заданным дескриптором и возвращают актив. Я предполагаю, что с помощью шаблонов и/или наследования я мог бы просто получить общие функции получения, которые работают для любого ресурса. У меня нет большого опыта работы с ними, поэтому не очень очевидно, как я могу это реорганизовать.
struct ResourceHandle {
unsigned int id;
bool valid;
};
struct Mesh {
std::vector vertices;
unsigned int vao, vbo;
};
struct MeshMeta {
ResourceHandle handle;
std::string filepath;
time_t lastModifiedTime;
};
namespace ResourceManager {
namespace {
std::unordered_map meshes;
std::unordered_map textures;
std::unordered_map shaders;
}
void ReloadResources() {}
// Instead of this
ResourceHandle LoadMesh() {}
MeshMeta GetMesh(ResourceHandle handle) {}
ResourceHandle GetMesh(const std::string& filepath) {}
ResourceHandle LoadTexture() {}
TextureMeta GetTexture(ResourceHandle handle) {}
ResourceHandle GetTexture(const std::string& filepath) {}
ResourceHandle LoadShader() {}
ShaderMeta GetShader(ResourceHandle handle) {}
ResourceHandle GetShader(const std::string& filepath) {}
// It would just be
ResourceHandle LoadMesh() {}
ResourceHandle LoadTexture() {}
ResourceHandle LoadShader() {}
ResourceMeta GetResource(ResourceHandle handle) {}
ResourceHandle GetResource(const std::string& filepath) {}
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... and-or-oop
C++, как я могу уменьшить повторяющийся код с помощью шаблонов и/или ООП? [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1710608103
Anonymous
Я работаю над менеджером ресурсов для своего игрового движка, и для добавления нового актива требуется несколько повторений. Требуется 4 вещи: контейнер, функция загрузки и две функции получения, поэтому для 4 ресурсов (например, сетка, текстура, Шейдер, Аудио) — это 16 вещей, которые нужно добавить. Я не думаю, что я могу что-то сделать с функциями загрузки, но с другой стороны, функции получения, по сути, такие же: они ищут карту с заданным дескриптором и возвращают актив. Я предполагаю, что с помощью шаблонов и/или наследования я мог бы просто получить общие функции получения, которые работают для любого ресурса. У меня нет большого опыта работы с ними, поэтому не очень очевидно, как я могу это реорганизовать.
struct ResourceHandle {
unsigned int id;
bool valid;
};
struct Mesh {
std::vector vertices;
unsigned int vao, vbo;
};
struct MeshMeta {
ResourceHandle handle;
std::string filepath;
time_t lastModifiedTime;
};
namespace ResourceManager {
namespace {
std::unordered_map meshes;
std::unordered_map textures;
std::unordered_map shaders;
}
void ReloadResources() {}
// Instead of this
ResourceHandle LoadMesh() {}
MeshMeta GetMesh(ResourceHandle handle) {}
ResourceHandle GetMesh(const std::string& filepath) {}
ResourceHandle LoadTexture() {}
TextureMeta GetTexture(ResourceHandle handle) {}
ResourceHandle GetTexture(const std::string& filepath) {}
ResourceHandle LoadShader() {}
ShaderMeta GetShader(ResourceHandle handle) {}
ResourceHandle GetShader(const std::string& filepath) {}
// It would just be
ResourceHandle LoadMesh() {}
ResourceHandle LoadTexture() {}
ResourceHandle LoadShader() {}
ResourceMeta GetResource(ResourceHandle handle) {}
ResourceHandle GetResource(const std::string& filepath) {}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78170627/c-how-can-i-reduce-repetitive-code-with-templates-and-or-oop[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия