Re: Generic в C# и C++?
От: outsourcer Ниоткуда  
Дата: 27.11.03 13:37
Оценка:
Здравствуйте, 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...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.