C++, как я могу уменьшить повторяющийся код с помощью шаблонов и/или ООП? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 C++, как я могу уменьшить повторяющийся код с помощью шаблонов и/или ООП? [закрыто]

Сообщение 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) {}
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... and-or-oop
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»