On Tuesday, 7 May 2019 at 13:46:55 UTC, Devin wrote:
[snip]
I'm wrapping around OpenGL, which uses a int and uint for
numerous types, so I decided to make a mixin template for making
a sort of strict alias type. Importantly, they aren't assignable
to each other, unlike Typedef.
Here's the template I'm trying:
mixin template StrictAlias(T)
{
private T _handle;
@disable this(U)(U u);
this(U : U)(U data) if( is(U == T) )
{
_handle = data;
}
@property T handle()
{
return _handle;
}
alias handle this;
}
And here's how I'm using it:
struct MaterialId
{
mixin StrictAlias!GLuint;
}
struct UniformId
{
mixin StrictAlias!GLint;
}
struct AttribId
{
mixin StrictAlias!GLint;
}
So now I can easily call OpenGL functions using values of these
types, but I can't accidentally assign one to the other, and I
can only construct them with exactly the type they alias. Thanks
for the tips!