Re: C-Struct initialization at C++
От: vopl Россия  
Дата: 29.06.18 14:33
Оценка:
Здравствуйте, 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 потому что (кроме виртуальных функций) имеет базу-не-агрегат
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.