Re[10]: Про шаблоны и цели
От: remark Россия http://www.1024cores.net/
Дата: 16.04.06 22:12
Оценка:
Здравствуйте, Erop, Вы писали:


E>Общий смысл такой, что править шаблоны обычно дико дорого, поэтому их можно использовать либо в виде каких-то библиотечных очень хорошо отлаженных примитивов, скажем контейнеров. Либо в каких-то герметичных участках кода, где от чего-то надо несколько раз сдублировать код. Но только второе надо делать уже очень с опаской. Опять же про переиспользование таких шаблонов лучше всего забыть как правило сразу


Согласен, в некоторых местах явные интерфейсы более предпочтительны, а шаблоны неумесны.



R>>Зато и возможностей больше. Гораздо больше. Причём принципиально новых. Вспомни хотя бы std::vector<>! Как ты его предлагаешь реализовывать без шаблонов? Или ты его не используешь?


E>Конечно я не возражаю, против шаблонного массива. Но std::vector те не менее не использую. У нас в конторе есть своя, более древняя библиотечка, которая конечно хуже STL, но предсказуемее. Например там более очевидны временные сложности операуий


Ну я надеюсь, что он хотя бы типобезопасный, а не на void* работает
И ещё надеюсь, что мне, что бы захранить в таком контейнере какой-то класс, не надо вначале реализовывать интерфейс IStorable






E>

E>>>2) Намного более сложный синтаксис и семантика. Вот, например, что тут написано:
E>>>
E>>>template<typename TLog>
E>>>class Base {
E>>>protected
E>>>    void exit( int );
E>>>};

E>>>template<typename TLog>
E>>>class MyExitProicessor : public Base<TLog> {
E>>>public:
E>>>    void OnExit( TLog& log, int code )
E>>>    {
E>>>        LogExit( log, code );  // это какой-то метод MyExitProicessor, описанный ниже
E>>>        exit( code );
E>>>    }
E>>>};
E>>>


R>>Имхо. Всё понятно. Кстати, лучше писать "this->LogExit()" и "this->exit()", тогда и понятнее будет.


E>Может и лучше, но значит будет другое. Вообще-то в выделенной строке зовут функцию сишную exit .


А вот ещё кусок кода:

int* p = 0;
*p = 0;


И без шаблонов. Вывод какой: ламеров надо либо обучать, либо увольнять



E>

E>>>3) Очень неудобные сообщения об ошибках в пользовательском коде.

R>>В большинстве случаев точно такие же как и без шаблонов. Надо просто их внимательно прочитать, а не говорить сразу "ух ты #$%, я это даже читать не буду". Вот ещё здесь.


E>К несчастью мне приходится это читать регулярно. Я так тебе скажу, что до изобретения STL я не встречал сообщений об ошибках, которые не помещаются в окно консоли


Меня лично это не пугает.
Я сообщения об ошибках на принтере не печатаю, и за место в консоли арендную плату не плачу


E>

E>>>А вот реальные преимущества всех этих трюков Александреску они в чём?
R>>Меньше дублирования. Лучше понятны намерения программиста. Аспекты лучше выделены, а не замешаны в один клубок. Но это всё достигается за счёт наличия более сложного (интеллектуального) кода.
R>>Я так считаю: можно иметь или много "тупого" кода (я его называю "raw"), это когда много накопипастеных функций, или меньше кода, но более "интеллектуального".

E>Прости, но мне кажется, что все преимущества, кроме "Лучше понятны намерения программиста" достигаются хорошим проектированием и реализацией кода задачи, а вовсе не применением головоломных конструкций из шаблонов


К сожалению, некоторые задачи и некоторые виды дублирования не подвласны в С++ никому кроме шаблонов. Ни явным интерфейсам, ни хорошему проектированию.
К ещё больщему сожалению, некоторые виды дублирования не подвласны даже шаблоным, а подвласны только макросам...




E>Что же касается намерений, то я согласен, что они понятны. Они обычно (явно или просто по факту) состоят в том, чтобы удорожить разарботку и сопровождение.


Те, что используют исключения, паттерны, готовые библиотеки да и вообще С++ по-твоему те же намерения имеют? Вообще надо на asm'е писать. Всё до примитивного просто и явно.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.