Полное имя класса в макросе
От: _NN_ www.nemerleweb.com
Дата: 22.10.12 15:07
Оценка:
Имеем макроаттрибут для класса:

[MacroUsage(MacroPhase.BeforeInheritance, MacroTargets.Class)]
macro Test(tb : TypeBuilder)
{
 ... 
  Macros.DefineCTX(typer);
      
  def baseType = <[ Base[$(tb.ParsedTypeName)] ]>;

  ...
}


И использование:
class Base[T] {}

[Test]
class MyTest {}


Это работает, т.к. создает код вида Base[MyTest].
В случае генериков тут надо передавать все типы-аргументы, как это сделать ?

Т.е. код должен быть примерно таким:
  def baseType = <[ Base[$(tb.ParsedTypeName[..$(tb.GenericArgs))] ]>;


А еще лучше если бы уже было готовое свойство для полного имени класса включая типы-аргументы если это генерик и обычное если это обычный класс.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.