Основная причина, по которой я использую ООП, заключается в создании кода, который легко использовать повторно. Для этой цели идеально подходят интерфейсы в стиле Java. Однако, имея дело с C ++, я действительно не могу достичь какой-либо функциональности, такой как интерфейсы ... по крайней мере, нелегко.
Я знаю о чистых виртуальных базовых классах, но что меня действительно впечатляет, так это то, что они вынуждают меня создавать действительно неуклюжий код с указателями. Например. map<int, Node*> nodes;
(где Node - это виртуальный базовый класс).
Иногда это нормально, но иногда указатели на базовые классы просто не являются возможным решением. Например. если вы хотите вернуть объект, упакованный как интерфейс, вам нужно будет вернуть приведенный к объекту указатель базового класса ... но этот объект находится в стеке и не будет там после возврата указателя. Конечно, вы можете начать использовать кучу, чтобы избежать этого, но это добавляет гораздо больше работы, чем должно быть (избегая утечек памяти).
Есть ли способ достичь функциональности, подобной интерфейсу, в C ++ без неловкого обращения с указателями и кучей ?? (Честно говоря, несмотря на все эти проблемы и неудобства, просто придерживайтесь C.)