Да ладно, одно переопределение (определение) операторов для произвольных типов в С++ позволяет признать его более сложным, чем Java.
ONK, попробуй переопределить оператор для встроенных типов. Например operator+(int, int);
Это заблуждение. Все языки программирования имеют как положительные, так и отрицательные стороны. Различные языки предназначены для решения различных задач. Так что не бывает полностью "ацтойных" или "рульных" языков. Бывают кривые руки, ограниченность кругозора и консерватизм.
или мне показалось, или твой код не скомпилится там с угловыми скобочками беда, да и не мешало бы юзать typedef аха
Код прекрасно компилится на gcc3.3.5. А вот MS Visual C++.NET подкачал - как оказалось, он не поддерживает шаблоны функций, параметризованные шаблонами, находящиеся в шаблоне класса, который также параметризован шаблонами
Если под "более сложным" имелось в виду "пригодный для написания как можно менее понимаемых программ" -- то да.
Общепризнанный чемпион среди языков программирования, "пригодных для написания как можно менее понимаемых программ" - вовсе не C++, а perl.
Много думал. Появилась догадка о том, что может означать "чтобы мой класс наследовал от набора типов указанных мне юзером библиотеки". Пришло в голову такое:
А что насчет определения шаблона класса basic_ostream, входящего в стандартную библиотеку C++:
Код:
template <class Ch, class Tr = char_traits<Ch> > class basic_ostream : virtual public basic_ios<Ch, Tr> {/* */};
. В наследовании класса, инстанцированного из шаблона класса basic_ios нет совершенно никакого смысла? Интересно, что бы по этому поводу сказали разработчики стандартной библиотеки С++.
Есть ли в Java emplate (member) functions я сомневаюсь, но опять таки не вижу, чему это помешает.
Например, в C++ без шаблонных функций-членов нельзя создать конструкторы, зависящие от параметра-класса. Например, есть класс A. Необходимо, чтобы объекты этого класса могли конструироваться из объектов различных классов:
Код:
int a; char b; std::string c;
A aa(a), ab(b), ac(c);
Вместо того, чтобы заниматься cut&paste с последующей заменой имен классов, можно объявить шаблон конструктора:
Код:
template <class T> A(const T&);
А что прикажете делать, если создателю класса A неизвестны все возможные классы, с помощью которых может конструироваться объект, а известен лишь стандартный алгоритм конструирования?
в яве у нас шаблоны в run-time ведь преобразовываются?
Без понятия. То, что ты их применения, в отличие от C++, не требуется наличия исходников -- факт.
Если перед определением шаблона написать
export, то при компиляции единицы трансляции, использующей данный шаблон, исходники самого шаблона не потребуются. Необходимо лишь его объявление. Правда, многие известные компиляторы до сих пор не поддерживает export ... Но не будем о грустном. Давайте продолжим увлекательный спор )