Identifying associative array types from a template?
Christopher Wright
dhasenan at gmail.com
Sat Dec 1 19:03:42 PST 2007
Kirk McDonald wrote:
> 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;
> }
>
Thanks, I wound up doing essentially that. I guess I'll avoid attempting
complex is expressions in the future; I don't understand them very well.
More information about the Digitalmars-d-learn
mailing list