Identifying associative array types from a template?

Kirk McDonald kirklin.mcdonald at gmail.com
Sat Dec 1 17:40:57 PST 2007


Christopher Wright wrote:
> I want to identify the types that make up an associative array that I 
> get as a template parameter, something like:
> 
> template decomposeAA (T) {
>    static if (is (TT TVal : TVal[TKey])) {
>       alias Tuple!(TVal, TKey) decomposeAA;
>    } else {
>       static assert (false, "not an associative array");
>    }
> }
> 
> 
> Now, if I put conditions on TKey, this works, at least in D2. If I don't 
> put conditions on TKey, it always static asserts, even if I give it an 
> associative array.
> 
> Is this a bug? Is there another way to get the key type and value type?

Pyd has used this template for about as long as I can remember:

template isAA(T) {
     const bool isAA = 
is(typeof(T.init.values[0])[typeof(T.init.keys[0])] == T);
}

Writing an AA decomposing template is easy, given that:

template decomposeAA(T) {
     static assert(isAA!(T), "Not an associative array!");
     alias Tuple!(typeof(T.init.values[0]), typeof(T.init.keys[0])) 
dcomposeAA;
}

-- 
Kirk McDonald
http://kirkmcdonald.blogspot.com
Pyd: Connecting D and Python
http://pyd.dsource.org


More information about the Digitalmars-d-learn mailing list