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?

Reply via email to