Реализация шаблонов на макросах
От: CodingUnit Россия  
Дата: 05.02.12 20:55
Оценка:
Как мы уже говорили стоит задача в макросах получать значение типа обобщенного параметра. Я подумал и придумал первое простое решение этого:

Здесь в коде ниже DB это макрос куда надо передать обобщенный параметр.
Существует два макроса template и instance может быть со своим синтаксисом, пока над синтаксисом не думал и оставил так:


[template(T)]
class Test
{
  inst(DB(T)) value : List[T];
}

// и где то
def test = inst(Test, int)(); // то есть инстанционируем шаблон


Далее можно сделать вот что, макрос inst должен найти определение класса Test и запустить его инстанционирование, для параметра int создать копию Test в том же пространстве, попутно надо просканировать его члены, все обращения к T должны заменяться на параметр int и получится такая же копия Test только с известным параметром int.

во что должен быть преобразован код:


class Test_int
{
  DB(int) value : List[int];
}

// и в месте инстанционирования
def test = Test_int(); // в конечный код подставляется уже Test_int


Сам макрос inst должен понимать что он собирается инстанционировать если это макрос то он должен откладываться до известного параметра, который будет подставлять только запуск inst для шаблонного класса. Макросы template и inst из конечного класса удаляются, заместо inst подставляется выражение которое он инстанционирует если параметр известен. Макрос DB тоже просто с параметром T лучше не оставлять в коде класса потому что он будет раскрыт с этим выражением, поэтому делается inst(DB(T)). Хотя синтаксис можно придумать для этого, и все это как мне кажется не требует никакой переделки компилятора.

Какие мысли по этому поводу?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.