Здравствуйте, LaFlour, Вы писали:
LF>Насколько правила женериков для С++ отличаются/подходят к #-вым?
LF>Ну синтаксис и прочее что писал Алексадреску и Джосуттис, насколько они адекватны в свете #вых женериков?
А вот еще повод к размышлению...
При инстанциировании параметризованного класса на C++ компилятор генерит код только для тех методов класса, которые используются (не хочу тут разводить лишнего формализма:) Это позволяет создавать классы, функциональность, которых расширяется (или сужается) в зависимости от значения параметра шаблона.
template <class Strategy> class DoAll
{
private:
Strategy * s;
public:
void DoAlmostAllAndABitMore()
{
s->f();
}
};
При этом не проблема, если в классе Strategy в нужный момент не окажется функции f. Просто обломится компиляция.
В связи с тем, что generic'и являются сущностью времени выполнения они не могут предоставлять такую же гибкость. Тут у m$ явно случилась проблема. Но они нашли вполне концептуальное решение. Вместо того, чтобы ожидать, что у параметра шаблона будет наличествовать некий
метод, проще сразу потребовать, чтобы параметр шаблона принадлежал некому
типу. И это правильно. Но япона мать! Какой же уродский синтаксис для этого выбран! (эмоции...)
public class LinkedList<K,T> where K : IComparable<K>
скопировано из technical article c m$.com
выделенный жирным шрифтом кусок — типичное паскалевское утверждение о том, что K имеет тип IComparable. Кто там у них из delhi в .net пришел? Запамятовал...
Также обошлись и с конструкторами по умолчанию.
Примеры на VB даже смотреть страшно
А вот еще интересный момент.
Дженерик не может унаследоваться от своего параметра a la
template <class T> class A : public T
Вообще, зачем были введены generic'и в .net? Какая преследовалась цель?
Еще вопрос: в каком состоянии находится .net в отношении комитетов по стандартам? Если он все еще принадлежит m$, то это очень прискорбный факт... Потому что они уже сделали, что смогли, а сейчас начнутся извращения...
Что скажет благородная публика?
Всё, прошу прощения за столь длинный пост
NotYet, guys... not yet...