I'm working on an SDL wrapper based on the derelict sdl2 and
opengl3 bindings and so I've got a method like this I wrote:
@property Vector2!int minsize(){
int x, y;
SDL_GetWindowMinimumSize(this.window, &x, &y);
return Vector2!int(x, y);
}
I've got several almost identical methods for maximum size, and
window size, and window position, and so I thought I'd make a
mixin to cut down on the redundancy.
So I made my mixin, which looks like this - having definitions
for both the getter above and also setters that seem to work fine:
static string vectorpropertymixin(string name, string SDL_getter,
string SDL_setter){
return "
@property Vector2!int " ~ name ~ "(){
int x, y;
" ~ SDL_getter ~ "(this.window, &x, &y);
return Vector2!int(x, y);
}
@property void " ~ name ~ "(in Vector2!int vector){
this.set" ~ name ~ "(vector.x, vector.y);
}
void set" ~ name ~ "(in int x, in int y){
" ~ SDL_setter ~ "(this.window, x, y);
}
";
}
And then I put this in the class body, replacing the non-mixin
getters that compiled without incident:
mixin(vectorpropertymixin(
"minsize", "SDL_GetWindowMinimumSize",
"SDL_GetWindowMinimumSize"
));
And using the mixin I get this error when attempting to compile:
E:\Dropbox\Projects\d\mach\sdl\window.d-mixin-285(295): Error:
function pointer SDL_GetWindowMinimumSize (SDL_Window*, int*,
int*) is not callable using argument types (SDL_Window*,
const(int), const(int))
What's going on here? I feel like I must be making a really
stupid obvious oversight.