У меня есть класс Derived
, конструктор которого должен заполнять поля класса struct
, который передается в качестве аргумента конструктору класса Base
. Я хочу иметь возможность называть поля структуры, которую я заполняю, чтобы мой код соответствовал требованиям будущего (то есть: устойчив к добавлению и / или изменению порядка членов MyStruct
).
Примечание этот struct MyStruct
имеет значения по умолчанию, поэтому он не может быть инициализирован именованными полями непосредственно в списке инициализации (например: Base({.a = a, .b = b})
не работает). Кроме того, в моем случае удален конструктор копирования Base
. Кроме того, я использую C ++ 11.
В решении, которое я придумал, используется оператор placement new
для ручного вызова конструктора класса Base
в памяти, на которую указывает this
. Для этого мне также пришлось добавить конструктор по умолчанию protected
в мой класс Base
. Есть ли у этого подхода какие-либо возможные недостатки и / или кто-нибудь может предложить лучший метод?