template<typename... Arguments> auto make_window(Arguments&&... args)
{
return detail::make_resource(SDL_CreateWindow, SDL_DestroyWindow, std::forward<Arguments>(args)...);
}
for each resource.Quite honestly at that point I'd sooner use a good old variadic macro, C99 style. I mean, sure, it's arguably less "elegant" and C++-ish but it'll be easier to understand, to maintain and won't spam me with pages of arcane template errors when I forget a colon somewhere, so it'll be easier to debug as well.
That's the double edged sword of the C++ template system I suppose, in order to gain in purity they lost the simplicity of the C macro system without gaining the expressiveness and convenience of the Lisp macro system. In the end, what percentage of C++ coders use templates outside of the STL you think?
(At least the errors have got slightly better in recent g++ releases with colourised error output.)
You don't have to, you can create further helper function calling the generic thing but it's optional.
In these proposed solutions I've not yet seen one that has the capability to do this:
auto window = make_resource(SDL_CreateWindow, SDL_DestroyWindow, ....);
With my solution all you have to do is call make resource with different parameters it automatically works with other C style init/destroy created resources, not just from the SDL library but any C library that follows that practice.Can you try posting what your solution to the general problem would look like?
I suggest that this is somewhat solving the wrong problem.