Skip to content

Instantly share code, notes, and snippets.

@uchan-nos
Created January 24, 2014 00:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save uchan-nos/8589993 to your computer and use it in GitHub Desktop.
Save uchan-nos/8589993 to your computer and use it in GitHub Desktop.
template <typename T, typename U, typename ... ApiArgs, typename ... Args>
T ExitOnWrongValue0(const U& expected, const char* api_name, T (api_exp)(ApiArgs...), Args... args)
{
T x = api_exp(args...);
if (x != expected)
{
std::cout << api_name << " Error: " << std::endl;
exit(1);
}
return x;
}
template <typename T, typename U, typename ... ApiArgs, typename ... Args>
T ExitOnExactValue0(const U& expected, const char* api_name, T (api_exp)(ApiArgs...), Args... args)
{
T x = api_exp(args...);
if (x == expected)
{
std::cout << api_name << " Error: " << std::endl;
exit(1);
}
return x;
}
#define ExitOnWrongValue(value, api_name, ...) \
ExitOnWrongValue0(value, #api_name, api_name, __VA_ARGS__)
#define ExitOnExactValue(value, api_name, ...) \
ExitOnExactValue0(value, #api_name, api_name, __VA_ARGS__)
int main()
{
ExitOnWrongValue(0, SDL_Init, SDL_INIT_EVERYTHING);
auto win = ExitOnExactValue(nullptr, SDL_CreateWindow, "Hello World", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
SDL_Delay(1000);
SDL_DestroyWindow(win);
SDL_Quit();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment