Как сравнить два typedesc в шаблоне на равенство

Я хотел бы иметь возможность сравнить два описания типов в шаблоне, чтобы увидеть, ссылаются ли они на один и тот же тип (или, по крайней мере, имеют одно и то же имя типа), но не знаю, как это сделать. Оператор == этого не позволяет.

type
  Foo = object
  Bar = object

template test(a, b: expr): bool =
  a == b

echo test(Foo, Foo)
echo test(Foo, Bar)

Это дает мне это:

 Error: type mismatch: got (typedesc[Foo], typedesc[Foo])

Как это может быть сделано?


person Lye Fish    schedule 17.06.2015    source источник


Ответы (1)


Оператор is помогает: http://nim-lang.org/docs/manual.html#generics-is-operator

type
  Foo = object
  Bar = object

template test(a, b: expr): bool =
  #a is b # also true if a is subtype of b
  a is b and b is a # only true if actually equal types

echo test(Foo, Foo)
echo test(Foo, Bar)
person def-    schedule 17.06.2015
comment
Это идеально. Благодарю вас! - person Lye Fish; 17.06.2015