static if check for array and AA
BCS
BCS at pathlink.com
Wed Jun 21 15:42:41 PDT 2006
Kirk McDonald wrote:
> I'm fairly certain I've seen this come up before, but I can't seem to
> rediscover the thread.
>
> I'm trying to write a static if condition to check whether a certain
> type is an array, and another check for an associative array. The former
> proved to be moderately simple:
>
> bool isArray(T) () {
> static if (is(typeof(T.init[0])[] == T)) {
> return true;
> } else {
> return false;
> }
> }
>
> Note that this only checks for dynamic arrays.
>
> Associative arrays are harder. The above trick can't quite work as the
> type of the key can't be relied upon. It's easy enough to do the check
> using RTTI:
>
> bool isAA(T) () {
> TypeInfo t = typeid(T);
> if (cast(TypeInfo_AssociativeArray) t) {
> return true;
> } else {
> return false;
> }
> }
>
> But of course that is a runtime check, and this should really be a
> compile-time check. (Also, the various subclasses of TypeInfo are
> undocumented, so I'm not sure if it's a good idea to rely on them.)
>
> Anyone else have some template judo to share?
>
> -Kirk McDonald
template isAA(T)
{
const isAA = is((cast(T)null).keys);
}
???
or something like that
More information about the Digitalmars-d
mailing list