два конструктора с одинаковой шапкой в теле

как грамотно в плюсах организовать 2 разных конструктора имеющих одинаковый общий код в начале, а остальной код "свой"

  TextFrameBase(int size,int a , int b,int c) {
/*общий код*/
/*какой-то свой код для этого конструктора 1*/
}
  TextFrameBase(int size) {
/*общий код*/
/*какой-то свой код для этого конструктора 2*/
}

Ответы (1 шт):

Автор решения: KoVadim

Как всегда есть три базовых способа.

  • вынести общий код в отдельную функцию. Тут все очевидно.

  • использовать делегирующий конструктор.

      class TextFrameBase {
      public:
        TextFrameBase(int size, int c) {/*общий код*/}
        TextFrameBase(int size,int a , int b,int c) : TextFrameBase(size, c) {
          /*какой-то свой код для этого конструктора 1*/
        }
        TextFrameBase(int size) : TextFrameBase(size, 1) {
          /*какой-то свой код для этого конструктора 2*/
        }
     }
    
  • вынести общий код в код класса предка/шаблона crtp

  • ну и как всегда, если стандартные способы не помогают, то можно использовать макросы. Главное не порезаться.

→ Ссылка