On Tuesday, 21 May 2013 at 05:48:31 UTC, Ali Çehreli wrote:
On 05/20/2013 09:58 PM, Diggory wrote:
> On Tuesday, 21 May 2013 at 04:36:57 UTC, Ali Çehreli wrote:
>> Sounds like std.variant.Algebraic:
>>
>> http://dlang.org/phobos/std_variant.html#.Algebraic
>>
>> Ali
>
> I don't see how I could use that. Algebraic is for storing a
value, I'm
> trying to store just a type.
But you did say you needed to store data: "... an object that
stores some typed data ... the user should be able to tell it
what type of data it will hold."
With my current limited understanding, I still think Algebraic
would be a solution.
Ali
The data is stored elsewhere in a black-box completely outside
D's jurisdiction. Also the type of the data is supplied first,
and the data itself is supplied at a later time.
I gave up on the mixin idea but have come up with this:
import std.typetuple;
struct TypeEnum(T...) {
private int index;
private this(int index) {
this.index = index;
}
template from(U) {
static assert(staticIndexOf!(U, T) != -1, "Type is not in the
list of possible types for this TypeEnum");
public enum from = TypeEnum!T(staticIndexOf!(U, T));
}
}
Example usage:
alias TypeEnum!(
ubyte,
ushort,
float
) gpElementType;
gpElementType test = gpElementType.from!float;
Might make a nice addition to std.variant, no?