Код: Выделить всё
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