Современная альтернатива C ++ макросам для обертывания функций состояния OpenGL/SDLC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Современная альтернатива C ++ макросам для обертывания функций состояния OpenGL/SDL

Сообщение Anonymous »

Я разрабатываю приложение C ++ 20 с использованием OpenGL и SDL3 с классом window_manager , который завершает окно и управление государством OpenGL. Вместо записи отдельных функций членов для каждого вызова OpenGL/SDL (например, Glenable , Glviewport , SDL_GL_Setattribute ), я использую универсальный подход SET_STATE .

Код: Выделить всё

window_manager.h

Код: Выделить всё

#define GL_ATTR SDL_GL_SetAttribute
#define GL_RULE glEnable
#define VIEW glViewport
// ... others

class window_manager final : public ctx_gl {
public:
template
void set_state(T func, Ts... values);
// ... other methods
};
< /code>
window_manager.cpp

Код: Выделить всё

template
void window_manager::set_state(T func, Ts... values) {
func(values...);
}

// Explicit instantiations required for each function signature
template void window_manager::set_state(void (*)(unsigned int), int);
template void window_manager::set_state(void (*)(int, int, int, int), int, int, int, int);
// ... more instantiations
< /code>
[b]Usage Example[/b]
window_mgr.set_state(VIEW, 0, 0, width, height);
window_mgr.set_state(GL_RULE, GL_DEPTH_TEST);
Проблемы

[*] макросы используются для функций псевдонима, которые чувствуют себя устаревшими в современном C ++.
explicit watplate . /> Что я бы хотел, чтобы достичь < /h3>
Альтернатива чище, что: < /p>

Содержит простой синтаксис вызовов (например, set_state (func, args ...) < /code>). < /li>
избегает макроса, в то время как сохраняет upprer extensible. /> Устраняет необходимость в экземпляре ручного шаблона.>

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

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

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

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

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

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

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