тому, как разрастается код. Хотелось бы по максимуму его сократить и при этом сохранить качество.
                  
                  
                  
                  
                  
                  Скажите, есть ли способ обеспечить некоторые сабклассы дефолтной реализацией, при этом не обязывая их перегружать методы и запрещая пользователю определять объекты класса-родителя?
                  
                  
                  То есть я хочу что-то такое:
                  
                  
                  struct Base {
                  
                  
                      virtual void foo() = 0; 
                  
                  
                  };
                  
                  
                  void Base::foo() {
                  
                  
                        //default implementation
                  
                  
                  }
                  
                  
                  
                  
                  
                  struct Derived : Base {
                  
                  
                      //some class-specific methods
                  
                  
                  };
                  
                  
                  //...
                  
                  
                  Derived d;
                  
                  
                  d->foo(); //моветон?
                  
                  
                  
                  
                  
                  Отмечу также, что базовый класс параметризуется типом наследника:
                  
                  
                  template <typename Child = void>, чтобы возвращать нужную ссылку в сеттерах. Можно ли, например, сделать static_assert(!is_void<Child>) или enable_if<...> в базовом классе (оставив его неабстрактным) и надеятся, что пользователь библиотеки не сделает в коде Base<Derived> base;? Есть ли какие-то более надёжные решения?
                  
                  
                
тянет на обычный шаблонный класс
в чем проблема не писать = 0 в методе, если хочешь сделать дефолтную штуку?
В наследнике его придется явно переопределить. Экономия на спичках, на мой взгляд
? =0 заставляет определять
А я что написал?)
Хочу все сделать красиво, чтобы пользователь мог создавать только объекты наследников
ну помути что то с friend и приватными конструкторами
В базовом классе куча общих сеттеров, три наследника. Выйдет где-то + 30 строк
Унаследоваться от базы с приватными конструкторами?
protected-конструктор вроде бы все решает
Обсуждают сегодня