Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 332 333 [334] 335 336 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4996
,
|
|
|
|
|
Сообщ.
#4997
,
|
|
|
|
Потому что это нечестно
|
|
Сообщ.
#4998
,
|
|
|
|
Цитата trainer @ Потому что это нечестно Ну не надо сразу ставить невыполнимых условий Весь холивар давно показывает, что если надо сделать хоть что-то не на примитивных классах С++ (которые почти и не отличаются от записей), то без шаблонов никуда (и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно) |
|
Сообщ.
#4999
,
|
|
|
|
Цитата Romkin @ Пусть даже так. Что дальше? Ну не надо сразу ставить невыполнимых условий Весь холивар давно показывает, что если надо сделать хоть что-то не на примитивных классах С++ (которые почти и не отличаются от записей), то без шаблонов никуда (и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно) ![]() Шаблоны -- языковой механизм, открывающий практически безграничные возможности с одной стороны, при минимальных затратах ресурсов и вычислительной сложности получаемого кода с другой стороны. А теперь ответь мне, какова причина их не использовать? |
|
Сообщ.
#5000
,
|
|
|
|
Цитата Romkin @ То, что более-менее знающий C++ программист использует шаблоны чтобы писать код, который он в дальнейшем сможет легко перенастроить и повторно использовать, не значит, что "без шаблонов никуда". Это просто очень удобный инструмент, отказываться от которого очень глупо.Весь холивар давно показывает, что если надо сделать хоть что-то не на примитивных классах С++ (которые почти и не отличаются от записей), то без шаблонов никуда Цитата Romkin @ И это так, в смысле - это возможно. Некоторые используют C++-компилятор для "С с классами". Просто не всем понятна разница между ними. и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно |
|
Сообщ.
#5001
,
|
|
|
|
Цитата Romkin @ Весь холивар давно показывает, что если надо сделать хоть что-то не на классах С++, то без шаблонов никуда (и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно) Скрытый текст Если кто будет спрашивать - вся чушь из цитаты вырезана На шаблонах в плюсах 1) пишут обобщённый код, для чего собственно они и были введены в язык - никакого приминала не вижу, и 2) используют для метапрограммирования, пусть это и не самый удобный механизм и хотелось бы лучшего, но у двух конкурентов по топику ничего подобно нет и в помине. Так что да, C++ многогранен. А кто вам говорит, что шаблоны изучать необязательно - так покажите мне такого. Ну, а если вы попытались и не получилось - так и покайтесь, что не осилили, здесь все свои. |
|
Сообщ.
#5002
,
|
|
|
|
В принципе, чтобы написать такую функцию id, шаблоны достаточно знать в объеме 5-минутного ознакомления с соответствующей страницей руководства. Поскольку это пример самого примитивного использования шаблонов.
Добавлено Шаблоны кстати (по словам Страуструпа) первоначально и были введены, чтобы избавиться от необходимости наследования от общего предка. Сразу же выяснилось, что их возможности куда шире. А спустя некоторое время выяснилось, что они еще шире. И т.д. |
|
Сообщ.
#5003
,
|
|
|
|
Цитата Romkin @ Весь холивар давно показывает, что если надо сделать хоть что-то не на примитивных классах С++ (которые почти и не отличаются от записей), то без шаблонов никуда (и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно) ![]() Ты просто не разбирался в тех примерах . Можно было бы сделать совсем по другому и все в рантайме.Тот же GObject реализует полноценную ОО-систему в С(где шаблонов нет). Просто шаблоны очень удобный механизм. Вот и все. |
|
Сообщ.
#5004
,
|
|
|
|
Цитата MyNameIsIgor @ Ну, а если вы попытались и не получилось - так и покайтесь, что не осилили, здесь все свои. У меня энту пакость и желания-то изучать нет. Цитата MyNameIsIgor @ 2) используют для метапрограммирования, пусть это и не самый удобный механизм и хотелось бы лучшего, но у двух конкурентов по топику ничего подобно нет и в помине. Как раз у этих конкурентой для метапрограммирования все есть исходно и в языке, просто мозгу, который запорчен примитавами шаблонов и макросов, врубиться в это невозможно, исключения - редкость |
|
Сообщ.
#5005
,
|
|
|
|
Цитата Romkin @ Как раз у этих конкурентой для метапрограммирования все есть исходно и в языке, просто мозгу, который запорчен примитавами шаблонов и макросов, врубиться в это невозможно, исключения - редкость Т.е. вы таки покажете нормальные списки типов в делфях? А то предшественник то ваш эпично слился... |
|
Сообщ.
#5006
,
|
|
|
|
Цитата MyNameIsIgor @ Т.е. вы таки покажете нормальные списки типов в делфях? Я, похоже, много пропустил. Что подразумевается под "списки типов"? |
|
Сообщ.
#5007
,
|
|
|
|
Romkin, давай без оскорблений, а
? |
|
Сообщ.
#5008
,
|
|
|
|
Цитата Romkin @ Я, похоже, много пропустил. Что подразумевается под "списки типов"? Такое объяснение устроит? Там чуть ранее и пример с кортежами, при реализации которых их можно применить. |
|
Сообщ.
#5009
,
|
|
|
|
Накодил свою реализацию кортежей:
![]() ![]() template<typename value_t, int index> class value_holder { public: typedef value_t value_type; public: inline value_holder(const value_type& value) : _value(value) { } inline value_type& get() { return _value; } private: value_type _value; }; class empty_t{}; template<int index> class value_holder<empty_t, index>{}; template<typename value1_t, typename value2_t = empty_t, typename value3_t = empty_t, typename value4_t = empty_t, typename value5_t = empty_t, typename value6_t = empty_t, typename value7_t = empty_t, typename value8_t = empty_t> class tuple { }; template<typename value1_t> class tuple<value1_t> : public value_holder<value1_t, 1> { protected: template<int type_num> class type_holder; template<> class type_holder<1> { public: typedef value1_t type; }; public: inline tuple(const value1_t& value1) : value_holder<value1_t, 1>(value1) { } template<int index> inline typename value_holder<typename type_holder<index>::type, index>::value_type& get() { return value_holder<typename type_holder<index>::type, index>::get(); } }; template<typename value1_t, typename value2_t> class tuple<value1_t, value2_t> : public tuple<value1_t>, public value_holder<value2_t, 2> { protected: template<> class type_holder<2> { public: typedef value2_t type; }; public: inline tuple(const value1_t& value1, const value2_t& value2) : tuple<value1_t>(value1), value_holder<value2_t, 2>(value2) { } template<int index> inline typename value_holder<typename type_holder<index>::type, index>::value_type& get() { return value_holder<typename type_holder<index>::type, index>::get(); } }; template<typename value1_t, typename value2_t, typename value3_t> class tuple<value1_t, value2_t, value3_t> : public tuple<value1_t, value2_t>, public value_holder<value3_t, 3> { protected: template<> class type_holder<3> { public: typedef value3_t type; }; public: inline tuple(const value1_t& value1, const value2_t& value2, const value3_t& value3) : tuple<value1_t, value2_t>(value1, value2), value_holder<value3_t, 3>(value3) { } template<int index> inline typename value_holder<typename type_holder<index>::type, index>::value_type& get() { return value_holder<typename type_holder<index>::type, index>::get(); } }; ///.... tuple<int, double, std::string> t(1, 1.1, "111"); int int_val = t.get<1>(); // ok double dbl_val = t.get<2>(); // ok std::string str_val = t.get<3>(); //ok int int_val = t.get<1>(); // ok double dbl_val = t.get<1>(); // ok std::string str_val = t.get<1>(); //error int int_val = t.get<2>(); // warning double dbl_val = t.get<2>(); // ok std::string str_val = t.get<2>(); //error int int_val = t.get<3>(); // error double dbl_val = t.get<3>(); // error std::string str_val = t.get<3>(); //ok |
|
Сообщ.
#5010
,
|
|
|
|
Повстанець, да ты что! Там же шаблоны, фиии....
|