Здравствуйте, Alexander G, Вы писали:
SaZ>>Есть несколько структур, которые наследуются от базовой и содержат одинаковые поля. И некоторый враппер, который позволяет брать из них данные в удобном виде.
SaZ>>Хочется как-то отказаться от шаблонов, чтобы закоментированный код работал. Выносить общие переменные в базовую структуру нельзя.
AG>Чтобы код, аналогичный закомментриованному, работал, не нужно отказываться от шаблона, нужно просто скрестить статический и динамический полиморфизм во таким образом:
для данного примера можно без уника:
const MetaBase& wa = Wrap( a );
const MetaBase& wb = Wrap( b );
std::cout << wa.name() << "\n";
std::cout << wb.name() << "\n";
for ( const auto meta : { &wa, &wb } )
std::cout << meta->name() << "\n";