Здравствуйте, Chorkov, Вы писали:
C>Есть ряд структур — реализаций некоторого интерфейса.
C>Используются они только в одном месте каждая. Хочется как-то воспользоваться новыми возможностями языка, чтобы упростить себе написание конструкторов для этих структур (избежать copy/paste всех членов структуры в конструкторе).
C>C>struct IInterface
C>{
C> IInterface() {}
C> virtual ~IInterface() {}
C> virtual int foo () =0;
C> //...
C>};
C>struct Implementation : IInterface
C>{
C> int a;
C> double b;
C> int foo () { return a; }
C> // ...
C>};
C>Implementation a { 1, 3.14 }; // при наличии наследование - не работает.
C>
C>Пока небыло наследования, я использовал С-ю инициализацию структур. Все работало. Нельзя ли как-то исхитриться применить тоже прием к реализации интерфейса?
Мануал.
для 17 стандарта — твой Implementation не является aggregate потому что содержит виртуальные функции (неявный деструктор, foo), соответственно к нему не применима aggregate initialization.
для 14 еще хуже, Implementation не является aggregate потому что (кроме виртуальных функций) имеет базу-не-агрегат