?
struct alignas(...) Base {};
struct Derived1 : Base {};
struct Derived2 : Base {};
int main()
{
std::vector<Base> v(2);
new (&v[0]) Derived1();
new (&v[1]) Derived2();
return 0;
}
. . alignas , . ... ( 2), Derived1 Derived2 . sizeof(Derived1) 16, sizeof(Derived2) 24, alignas(32).
EDIT
@KubaOber, alignas , . - std::variant. :
int main()
{
std::vector<std::variant<Derived1, Derived2>> v;
v.emplace_back(Derived1());
v.emplace_back(Derived2());
for (const auto& e : v)
std::visit(VisitPackage(), e);
return 0;
}
VisitPackage :
struct VisitPackage
{
void operator()(const Derived1&) { std::cout << "Derived 1.\n"; }
void operator()(const Derived2&) { std::cout << "Derived 2.\n"; }
};