понедельник, 29 сентября 2008 г.

Различия шабонов C++ и D 2.x

В программировании шаблонов D и C++ есть несколько отличий. Само слово template в D означает не совсем то что в C++.
например шаблон такого класса в C++

template <T1,class T2>
class Pair
{
T1 first;
T2 seccond;
};

Для начала....
Ключевое слово template в означает в плюсах начало объявления какого-то шаблона. В D это слово означает начало блока зависящего от параметров шаблона. в этом блоке, может находится как код функций, зависящих от параметров шаблона, так и объявление класса.

tempalte TypeBlock(T1,T2)
{
class Pair
{
T1 first;
T2 seccond;
}
}


Этот же класс можно записать короче.

class Pair(T1,T2)
{
T1 first;
T2 seccond;
}

Для записи шаблона класса, функции, структура или метода ключевое слово template не нужно. Оно может понадобиться только тогда, когда вам необходимо объявить несколько типов, которые зависят от параметров шаблона.

tempalte TypeBlock(T1,T2)
{
class A
{
T1 first;
T2 seccond;
}

class B
{
void show(T1 a,T2 b)
{
write(a+b);
}
}
}

Здес ябъявляются два класса, A и B. Они оба зависят от Типов-параметров шаблона.
Также, такие "шаблоны", могут понадобится для подмешивания типов-mixin.

tempalte VarA(T)
{
T a;
}

struct B
{
mixin VarA!(int);
}
struct C
{
mixin VarA!(float);
}

void main()
{
B b;
b.a=10;
C c;
C.a=0.5;
}

При помощи ключевого слова mixin, можно "подмешать" содержимое шаблона в код.