C ++: конструирование путем возврата в конструкторе - PullRequest
0 голосов
/ 06 ноября 2018

Предположим, у меня есть несколько объектов с конструктором в стиле C:

struct MyStruct { int item1; int item2 };
MyStruct construct_struct(int a, int b, int c, ...);

И я хотел бы, не переставляя полностью копировать код и вставляя дублирующий код, просто определить под структурами конструктор стиля C ++:

MyStruct::MyStruct(int a, int b, int c, ...){   
    // in pseudo code
    this = construct_struct(a,b,c,...);
}

Как это можно сделать в C ++?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Я бы хотел, не переставляя полностью копировать код и вставляя дублирующий код, просто определить под структурами конструктор стиля C ++

Вместо того, чтобы копировать код, вы должны переместить его в конструктор C ++, а затем переписать конструктор в стиле C, чтобы он вызывал C ++:

MyStruct::MyStruct(int a, int b, int c, ...){   
    // the code from construct_struct(a,b,c,...) goes here
}

MyStruct construct_struct(int a, int b, int c, ...) {
    return MyStruct(a, b, c, ...);
}

Это решает проблему с дублированием кода и сохраняет конструктор C.

0 голосов
/ 06 ноября 2018

Если вы не хотите делать то, что dasblinkenlight предлагает (даже если вы должны). Подход в ваш собственный ответ также будет работать, пока ваш объект может быть назначен. Для маловероятного случая, когда ваш объект получает член const или его невозможно назначить по другой причине, я представляю его для полноты.

Вы можете делегировать конструктору копирования / перемещения:

MyStruct construct_struct(int a, int b, int c, ...){
}

MyStruct::MyStruct(int a, int b, int c, ...) : MyStruct(construct_struct(a,b,c,...)) {}
0 голосов
/ 06 ноября 2018

Простой ответ:

MyStruct construct_struct(int a, int b, int c, ...){
}
MyStruct::MyStruct(int a, int b, int c, ...){
    *this = construct_struct(a,b,c,...);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...