Rozważmy następujący kod:Czy mogę uniknąć wyraźnego zapisu konstruktora dla każdej struktury w wariancie std ::?
#include <variant>
struct x {
int y;
};
int main() {
std::variant<x> v(std::in_place_type<x>, {3}); /*1*/
return std::get<x>(v).y;
}
nie skompilować i nie robi podczas wyjmowania {}
z linii /*1*/
, choć łączna inicjalizacji
x a{3};
x b({3});
działa w obu formach „konstruktora-like”. Czy mogę w jakiś sposób uświadomić inicjatorowi std::variant
możliwości konstruowania struktur przy użyciu agregacyjnej inicjalizacji bez konieczności pisania nudnych konstruktorów dla każdej struktury, które mogą być używane w moim prawdziwym świecie?
Spodziewam się to do pracy, w jakiś sposób, jak za cppreference dwa przeciążenia (5) i (6) w kwestii zarówno powiedzieć
konstruuje wariant z określoną alternatywę T i inicjuje zawarty wartość z argumentami [...]
Używam GCC 7 jeśli liczy.
Jeśli konsola, 'std :: make_unique' i rodzina mają takie samo ograniczenie :( – Rakete1111
Inicjalizacja agregacji zawsze była cierniem w systemie inicjującym C++. –