Indexing an associative array with a list of types

grauzone none at example.net
Sat Apr 11 14:54:56 PDT 2009


Doctor J wrote:
> I'd like to make a compile-time constant associative array mapping a list of types to an integer:
> 
> int[??] typemap;
> 
> typemap[(int,float)] = 1;
> typemap[(long,double)] = 2;
> ...
> int t = typemap[(int,float)];
> 
> I tried playing with std.typetuple but no luck.  I can get halfway there with a function template, but then I can't iterate over the keys or values.  Is there a way to do something like this in D?  More generally, is there a way to store a type in a variable?
> 

Just curious, how did you do this function template thing?

> Thanks.
> 

Types are a compiletime only thing. To get a "runtime" handle for a 
type, use TypeInfo. For each type, there exists exactly one TypeInfo 
object instance. You can get this object with typeid():

TypeInfo ti = typeid(int);

Your example above could actually be implemented like this:

int[TypeInfo[]] typemap;

typemap[[typeid(int), typeid(float)]] = 1;

(Two [] bracket pairs because one is for indexing into the AA, and one 
is an array delegate for constructing the TypeInfo[] array, which is 
used as key.)


More information about the Digitalmars-d-learn mailing list