Сравнение шаблонов C++ и обобщенных типов C#
От: mefrill Россия  
Дата: 03.09.04 05:27
Оценка: :))
Недавно у меня возникла проблема: необходимо объяснить людям, не разбирающимся в си++, почему шаблоны си++ лучше, чем обобщенные типы в C#. Понятно, что основная тема, которую надо задвигать — это run-time генерация типов в C# и идущие от этого ограничения. Только я сильно сомневаюсь, что эти люди воспримут эти объяснения. Хотелось бы какой-нибудь простой пример того, что можно сделать хорошо с помощью шаблонов и нельзя сделать сносно с помощью обощенных типов. Сам голову уже три дня ломаю, пока ничего не придумал.

Спасибо заранее,
Владимир.
Re: Сравнение шаблонов C++ и обобщенных типов C#
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 03.09.04 05:53
Оценка:
Вот такое на generic-ах не делается:

ref class A
{
public:
    void G()
    {
        Console::WriteLine("A");
    }
};

template<typename T>
ref class B: T
{
public:
    void F()
    {
        G();
        Console::WriteLine("B");
    }
};


void _tmain()
{
    (gcnew B<A>())->F();
}
Re[2]: Сравнение шаблонов C++ и обобщенных типов C#
От: mefrill Россия  
Дата: 03.09.04 07:07
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>Вот такое на generic-ах не делается:


Ага, только им еще теперь надо концепцию policy объяснить .
Re[3]: Сравнение шаблонов C++ и обобщенных типов C#
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 03.09.04 07:13
Оценка:
DG>>Вот такое на generic-ах не делается:

M>Ага, только им еще теперь надо концепцию policy объяснить .



Можно рассказать, что такое множественное наследование (mixin-ы и т.д.) и его пользу для народа.

А затем показать, что с использованием шаблонов можно эмулировать множественное наследование для .Net-а.
С помощью generic-ов множественное наследование эмулировать не получается.
Re: Сравнение шаблонов C++ и обобщенных типов C#
От: Batiskaf Израиль http://www.mult.ru/
Дата: 03.09.04 07:47
Оценка:
Здравствуйте, mefrill, Вы писали:


M>Недавно у меня возникла проблема: необходимо объяснить людям, не разбирающимся в си++, почему шаблоны си++ лучше, чем обобщенные типы в C#. Понятно, что основная тема, которую надо задвигать — это run-time генерация типов в C# и идущие от этого ограничения. Только я сильно сомневаюсь, что эти люди воспримут эти объяснения. Хотелось бы какой-нибудь простой пример того, что можно сделать хорошо с помощью шаблонов и нельзя сделать сносно с помощью обощенных типов. Сам голову уже три дня ломаю, пока ничего не придумал.


M>Спасибо заранее,

M>Владимир.

Например посмотри это:

http://www.rsdn.ru/Forum/Message.aspx?mid=723222#723222
Автор: Batiskaf
Дата: 16.07.04
Will I live tomorrow? Well I just can't say
But I know for sure — I don't live today.
Jimi Hendrix.
Re: Сравнение шаблонов C++ и обобщенных типов C#
От: StanislavK Великобритания  
Дата: 03.09.04 08:05
Оценка: +2
Здравствуйте, mefrill, Вы писали:


M>Недавно у меня возникла проблема: необходимо объяснить людям, не разбирающимся в си++, почему шаблоны си++ лучше, чем обобщенные типы в C#. Понятно, что основная тема, которую надо задвигать — это run-time генерация типов в C# и идущие от этого ограничения. Только я сильно сомневаюсь, что эти люди воспримут эти объяснения. Хотелось бы какой-нибудь простой пример того, что можно сделать хорошо с помощью шаблонов и нельзя сделать сносно с помощью обощенных типов. Сам голову уже три дня ломаю, пока ничего не придумал.


Чаще всего, лучше то, что проще. Нельзя сказать, что лучше шаблоны или обобщенные типы — это все для любителей пофлеймить. Можно только объяснить разницу, а дальше надо отталкиваться от задачи.
Re: Сравнение шаблонов C++ и обобщенных типов C#
От: dshe  
Дата: 03.09.04 08:57
Оценка: +1 :)
Здравствуйте, mefrill, Вы писали:

M>Недавно у меня возникла проблема: необходимо объяснить людям, не разбирающимся в си++, почему шаблоны си++ лучше, чем обобщенные типы в C#. [...] Сам голову уже три дня ломаю, пока ничего не придумал.


Так, может, они вовсе и не лучше?
--
Дмитро
Re: Сравнение шаблонов C++ и обобщенных типов C#
От: jazzer Россия Skype: enerjazzer
Дата: 03.09.04 09:47
Оценка:
Здравствуйте, mefrill, Вы писали:


M>Недавно у меня возникла проблема: необходимо объяснить людям, не разбирающимся в си++, почему шаблоны си++ лучше, чем обобщенные типы в C#. Понятно, что основная тема, которую надо задвигать — это run-time генерация типов в C# и идущие от этого ограничения. Только я сильно сомневаюсь, что эти люди воспримут эти объяснения. Хотелось бы какой-нибудь простой пример того, что можно сделать хорошо с помощью шаблонов и нельзя сделать сносно с помощью обощенных типов. Сам голову уже три дня ломаю, пока ничего не придумал.


M>Спасибо заранее,

M>Владимир.

если ты пишешь

template<class T>
void f(T& t)
{
 t(1);
};

то в эту функцию ты сможешь засунуть как другую функцию, так и объект какого-нть класса, у которого определен operator(), который можно вызвать с одним параметром типа int, при этом тебе начихать на остальные дефолтные параметры или их отсутствие, на возвращаемое значение:
struct A
{
    int operator()(int) {}
};

struct B
{
    void operator()(int, float = 0) {}
};

double func(int, double = 0) { return 0; }

int main()
{
    A obj1;
    B obj2;
    
    f(obj1);
    f(obj2);
    f(func);
}
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Сравнение шаблонов C++ и обобщенных типов C#
От: _nn_ www.nemerleweb.com
Дата: 06.09.04 07:57
Оценка: 17 (1)
Здравствуйте, mefrill, Вы писали:


M>Недавно у меня возникла проблема: необходимо объяснить людям, не разбирающимся в си++, почему шаблоны си++ лучше, чем обобщенные типы в C#. Понятно, что основная тема, которую надо задвигать — это run-time генерация типов в C# и идущие от этого ограничения. Только я сильно сомневаюсь, что эти люди воспримут эти объяснения. Хотелось бы какой-нибудь простой пример того, что можно сделать хорошо с помощью шаблонов и нельзя сделать сносно с помощью обощенных типов. Сам голову уже три дня ломаю, пока ничего не придумал.


Это зависит от задачи.
Преумущество у шаблонов — не создается код во времени выполнения программы.
Преумущество у дженериков — работают во времени выполнения программы.

Простой пример не реализуемый на дженериках:
template<unsigned N> struct factorial { enum { value = N*x<N-1>::value };
template<> struct factorial<0> { enum { value = 1 }; };
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Сравнение шаблонов C++ и обобщенных типов C#
От: _nn_ www.nemerleweb.com
Дата: 06.09.04 12:44
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, mefrill, Вы писали:



M>>Недавно у меня возникла проблема: необходимо объяснить людям, не разбирающимся в си++, почему шаблоны си++ лучше, чем обобщенные типы в C#. Понятно, что основная тема, которую надо задвигать — это run-time генерация типов в C# и идущие от этого ограничения. Только я сильно сомневаюсь, что эти люди воспримут эти объяснения. Хотелось бы какой-нибудь простой пример того, что можно сделать хорошо с помощью шаблонов и нельзя сделать сносно с помощью обощенных типов. Сам голову уже три дня ломаю, пока ничего не придумал.


__>Это зависит от задачи.

__>Преумущество у шаблонов — не создается код во времени выполнения программы.
__>Преумущество у дженериков — работают во времени выполнения программы.

__>Простой пример не реализуемый на дженериках:

template<unsigned N> struct factorial { enum { value = N*factorial<N-1>::value };
template<> struct factorial<0> { enum { value = 1 }; };

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Сравнение шаблонов C++ и обобщенных типов C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.09.04 02:28
Оценка:
Здравствуйте, jazzer, Вы писали:



J>если ты пишешь


J>
J>template<class T>
J>void f(T& t)
J>{
J> t(1);
J>};
J>

J>то в эту функцию ты сможешь засунуть как другую функцию, так и объект какого-нть класса, у которого определен operator(), который можно вызвать с одним параметром типа int, при этом тебе начихать на остальные дефолтные параметры или их отсутствие, на возвращаемое значение:

А ничего что есть дженерик делегаты и дженерик интерфейсы? Ну, там:
T delegate SomeFuncTypw<T>(T x);

interface I
{
    T SomeFuncTypw<T>(T x);
}
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Сравнение шаблонов C++ и обобщенных типов C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.09.04 02:28
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>Вот такое на generic-ах не делается:


Реализуются но немного по другому. Вводится фективный член типа некоторого дженерик-интрфейса, а интеряфейс реализуется в структуре. Могу статейку тиснуть про этот метод. Я так дженерик-коллекции сделал для R#-а.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Сравнение шаблонов C++ и обобщенных типов C#
От: jazzer Россия Skype: enerjazzer
Дата: 07.09.04 09:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, jazzer, Вы писали:




J>>если ты пишешь


J>>
J>>template<class T>
J>>void f(T& t)
J>>{
J>> t(1);
J>>};
J>>

J>>то в эту функцию ты сможешь засунуть как другую функцию, так и объект какого-нть класса, у которого определен operator(), который можно вызвать с одним параметром типа int, при этом тебе начихать на остальные дефолтные параметры или их отсутствие, на возвращаемое значение:

VD>А ничего что есть дженерик делегаты и дженерик интерфейсы? Ну, там:

VD>
VD>T delegate SomeFuncTypw<T>(T x);

VD>interface I
VD>{
VD>    T SomeFuncTypw<T>(T x);
VD>}
VD>


Если оно действительно все это делает — это круто
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.