Скобочки для templates
От: x-code  
Дата: 04.09.11 16:28
Оценка:
Наткнулся на эту тему
Автор: IROV..
Дата: 02.09.11
, задумался, потом вспомнил про эту
Автор: VladD2
Дата: 14.12.09
, прочитал все по несколько раз Но так и не понял до конца, в чем там фишка.

На самом деле самому интересно, в том числе с точки зрения собственного разрабатываемого языка программирования. Какие неоднозначности возникают в связи с тем, что для угловых скобок, операторов больше меньше и сдвигов используются одни и те же символы?

С одной стороны, в С,С++,Java,C#,Delphi — т.е. в основных языках, используются <>. Поэтому в любом новом языке хорошо бы оставить именно <>. С другой стороны, ясно что неоднозначности есть и наверняка они будут мешать. Подумал и придумал свой вариант.

В объявлении шаблонов оставить все как есть, обычные угловые скобки
//c#
class MyGeneric<T>
{
 T data[100];
}
//c++
template<int N>
int get(int x)
{
    return N*x;
}


При создании объектов вроде достаточно добавить какой-нибудь символ, и все, неопределенностей нет.
например ! как в Ди.
MyGeneric!<int> foo;
int a = get!<10>(20);


Если поймали спецсивол и следом за ним "<", то это открывающая угловая скобка, и компилятор ожидает, что будет закрывающая, соответственно символ '>' интерпретируем именно как закрывающую угловую скобку. Иначе тупо интерпретируем ее как знак "меньше". Кому надо заюзать операцию сравнения или сдвига внутри аргумента шаблона — пусть юзают круглые скобки как обычно для приотиретов операций. И всякие сдвиги ">>" и "<<" тупо считать сдвигами и также кому надо — пусть юзают круглые скобки.
int a = get!< ((9>8)<<2)  >(20);


Преимущества: везде используются родные угловые скобочки, мозг ломать не надо. И дополнительный спецсимвол вроде как(???) снимает неоднозначности.
Что думаете?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.