www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Get AA key and value type

reply Pierre <cathary.pierre neuf.fr> writes:
Hi everybody,

I would like to extract key and value type from AA.

I found this answer on forum :

template AATypes(T)
{
   // todo: static assert if T is no AA type here

   alias ArrayElementType!(typeof(T.keys)) key;
   alias ArrayElementType!(typeof(T.values)) value;
}

But compiler failed,I think T need to be a value in order to get 
keys and values attributes.

So how can I get types without instance ?
Thanks for help.
Sep 19 2015
next sibling parent reply ponce <contact gam3sfrommars.fr> writes:
On Saturday, 19 September 2015 at 12:50:51 UTC, Pierre wrote:
 So how can I get types without instance ?
 Thanks for help.
---------->8--------- template AATypes(T) { // todo: static assert if T is no AA type here alias ArrayElementType!(typeof(T.init.keys)) key; alias ArrayElementType!(typeof(T.init.values)) value; } ---------->8--------- Should work.
Sep 19 2015
parent Pierre <cathary.pierre neuf.fr> writes:
On Saturday, 19 September 2015 at 12:52:19 UTC, ponce wrote:
 On Saturday, 19 September 2015 at 12:50:51 UTC, Pierre wrote:
 So how can I get types without instance ?
 Thanks for help.
---------->8--------- template AATypes(T) { // todo: static assert if T is no AA type here alias ArrayElementType!(typeof(T.init.keys)) key; alias ArrayElementType!(typeof(T.init.values)) value; } ---------->8--------- Should work.
You're right it's OK now. Thank you.
Sep 19 2015
prev sibling parent reply Marc =?UTF-8?B?U2Now7x0eg==?= <schuetzm gmx.net> writes:
On Saturday, 19 September 2015 at 12:50:51 UTC, Pierre wrote:
 Hi everybody,

 I would like to extract key and value type from AA.
You can also do it with built-in syntax: template AATypes(AA : K[V], K, V) { alias Key = K; alias Value = V; }
Sep 19 2015
next sibling parent reply Pierre <cathary.pierre neuf.fr> writes:
On Saturday, 19 September 2015 at 18:13:09 UTC, Marc Schütz wrote:
 On Saturday, 19 September 2015 at 12:50:51 UTC, Pierre wrote:
 Hi everybody,

 I would like to extract key and value type from AA.
You can also do it with built-in syntax: template AATypes(AA : K[V], K, V) { alias Key = K; alias Value = V; }
I see, maybe .KeyType and .ValueType should be integrated in AA. Or like C++ with map, make a ValueType(::value_type) field wich contain a pair of type.
Sep 20 2015
parent reply =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 09/20/2015 12:47 AM, Pierre wrote:

 I see, maybe .KeyType and .ValueType should be integrated in AA.
 Or like C++ with map, make a ValueType(::value_type) field wich contain
 a pair of type.
Currently, they are templates in std.traits: http://dlang.org/phobos/std_traits.html#KeyType Ali
Sep 20 2015
parent Pierre <carhary.pierre neuf.fr> writes:
On Sunday, 20 September 2015 at 09:34:15 UTC, Ali Çehreli wrote:
 On 09/20/2015 12:47 AM, Pierre wrote:

 I see, maybe .KeyType and .ValueType should be integrated in 
 AA.
 Or like C++ with map, make a ValueType(::value_type) field 
 wich contain
 a pair of type.
Currently, they are templates in std.traits: http://dlang.org/phobos/std_traits.html#KeyType Ali
Nice! thank you for the information.
Sep 20 2015
prev sibling parent NX <nightmarex1337 hotmail.com> writes:
On Saturday, 19 September 2015 at 18:13:09 UTC, Marc Schütz wrote:
 You can also do it with built-in syntax:

 template AATypes(AA : K[V], K, V)
 {
     alias Key = K;
     alias Value = V;
 }
K[V] supposed to be V[K] btw...
Sep 20 2015