#include <iostream>
#include <array>
#include <tuple>
class Car {
public:
Car(const std::string& color, int age): color_(color), age_(age) {}
// ...
//private:
std::string color_;
int age_;
};
template <typename CarType, typename... Args ,size_t... Is>
std::array<CarType,sizeof...(Is)> make_cars(std::index_sequence<Is...>,Args&&... args )
{
return { (Is,CarType(args...))... };
}
class ThreeIdenticalCars {
//private:
public:
std::array<Car, 3> list;
//public:
ThreeIdenticalCars(const std::string& color, int age) :
list(make_cars<decltype(list)::value_type>(
std::make_index_sequence<std::tuple_size<decltype(list)>::value>(),
color,
age
))
{}
};
int main()
{
ThreeIdenticalCars threecars("red", 10);
for(auto& car : threecars.list)
std::cout << car.color_ << " " << car.age_ << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDx0dXBsZT4KCmNsYXNzIENhciB7CiAgICBwdWJsaWM6CiAgICBDYXIoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbG9yLCBpbnQgYWdlKTogY29sb3JfKGNvbG9yKSwgYWdlXyhhZ2UpIHt9CiAgICAvLyAuLi4KICAgIC8vcHJpdmF0ZToKICAgIHN0ZDo6c3RyaW5nIGNvbG9yXzsKICAgIGludCBhZ2VfOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIENhclR5cGUsIHR5cGVuYW1lLi4uIEFyZ3MgLHNpemVfdC4uLiBJcz4Kc3RkOjphcnJheTxDYXJUeXBlLHNpemVvZi4uLihJcyk+IG1ha2VfY2FycyhzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPixBcmdzJiYuLi4gYXJncyApCnsKICAgIHJldHVybiB7IChJcyxDYXJUeXBlKGFyZ3MuLi4pKS4uLiB9Owp9CgpjbGFzcyBUaHJlZUlkZW50aWNhbENhcnMgewogICAgLy9wcml2YXRlOgogICAgcHVibGljOgogICAgc3RkOjphcnJheTxDYXIsIDM+IGxpc3Q7CiAgLy9wdWJsaWM6CiAgICBUaHJlZUlkZW50aWNhbENhcnMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbG9yLCBpbnQgYWdlKSA6IAogICAgICAgIGxpc3QobWFrZV9jYXJzPGRlY2x0eXBlKGxpc3QpOjp2YWx1ZV90eXBlPigKICAgICAgICAJc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPHN0ZDo6dHVwbGVfc2l6ZTxkZWNsdHlwZShsaXN0KT46OnZhbHVlPigpLAogICAgICAgICAgICBjb2xvciwKICAgICAgICAgICAgYWdlCiAgICAgICAgICAgICkpCiAgIHt9Cn07CgppbnQgbWFpbigpCnsKICAgIFRocmVlSWRlbnRpY2FsQ2FycyB0aHJlZWNhcnMoInJlZCIsIDEwKTsKCiAgICBmb3IoYXV0byYgY2FyIDogdGhyZWVjYXJzLmxpc3QpCiAgICAgICAgc3RkOjpjb3V0IDw8IGNhci5jb2xvcl8gPDwgIiAiIDw8IGNhci5hZ2VfIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==