我有以下的功能,可以讓我換OpenGL命令,並在出錯日誌:結束語模板函數調用宏,或避免專業void返回
template<typename Res, typename Func, typename... Args>
struct Checker {
static Res run(const std::string& function_name, Func&& func, Args&&... args) {
Res result = func(std::forward<Args>(args)...);
check_and_log_error(function_name);
return result;
}
};
template<typename Func, typename... Args>
struct Checker<void, Func, Args...> {
static void run(const std::string& function_name, Func&& func, Args&&... args) {
func(std::forward<Args>(args)...);
check_and_log_error(function_name);
}
};
template<typename Func>
struct Checker<void, Func> {
static void run(const std::string& function_name, Func&& func) {
func();
check_and_log_error(function_name);
}
};
}
template<typename Res=void, typename Func, typename... Args>
Res _GLCheck(const std::string& function_name, Func&& func, Args&&... args) {
GLThreadCheck::check();
return GLChecker::Checker<Res, Func, Args...>::run(function_name, std::forward<Func>(func), std::forward<Args>(args)...);
}
我想換行_GLCheck在宏中,以便函數名稱參數自動提供,例如
#define GLCheck(...) _GLCheck(__func__, __VA_ARGS__)
能正常工作提供了GL調用不返回一個值,但如果是的話那麼_GLCheck必須實例是這樣的:
program_object_ = _GLCheck<GLuint>(__func__, glCreateProgram);
顯然,當我需要指定宏失敗像這樣的返回類型。是否有某種方式要麼:
- 寫一個更好的宏來處理這種情況,還是......不必通過改變模板函數明確定義的返回類型
- 避免?
謝謝!
爲什麼要醜?這就是追溯返回類型的原因。 – Angew 2014-10-02 07:05:28