Mishka> Ну, дык, интерфейсы в том виде, в каком они были в Джаве — ещё то уродство. Темплейты спасение. Иначе, как Рома упоминал — copy&paste. Или просто писание. А в С++ добавили специализацию под влиянием Степанова, если я правильно помню. Почему? Мне, наоборот, очень нравятся.
Именно интерфейсы, абстракция без имплементации. Помогает привести в порядок мозги. Вот в нашей новой конторе есть много таких приколов: что-то вроде:
class Interface {
public:
void setSomething() {
_impl->setSomething(); }
private:
ImplInterface *_impl;
}
class ImplInterface:public Interface() {
void setSomething() {
// blabla
}
}
На мой вопрос - нахрена, почему бы не определить абстрактый класс Interface и от него сделать имплементирующий класс, было сказано -
после такого существует тенденция использовать в коде ссылки на этот имплементирующий класс и в конце концов кончается тем, что люди используют не интерфейс, а имплементацию и изменения интерфейса делают в имплементации. Джава такого просто не позволила бы.
А темплейты в Джаве, собственно, добавили исключительно чтоб избежать тайпкастов в контейнерах. И это, имхо, чуть ли не единственное их обоснованное применение. Причем, сугубое имхо, НЕ только в Джаве, а и в C++. Не люблю я ни перегружаемых операторов ни сложных темплейтов. ИМХО, от них зло.