#include <iostream>
struct X2
{
int i;
int j;
char buf[10];
};
X2 glob{1,2,"abc"}; // OK
struct X
{
X2 x2;
template<typename... Args>
X(Args&&... args): x2{args...} {}
};
int main()
{
X x; // OK
X y{1, 2}; // OK
X z{1, 2, "abc"}; // error
}
Ostatni wiersz daje błąd: 17 : error: invalid conversion from 'const char*' to 'char' [-fpermissive]
Idealne spedycja zawodzi, gdy cel jest kruszywo z tablicy
Jeśli używam std::forward(args)...
zamiast args...
następnie nawet więcej błędów wymyślić; a także są błędy, gdy próbuję użyć {'a', 'b', 'c', '\0'}
jako inicjalizatora zamiast literału.
Czy istnieje sposób, aby to działało, to znaczy pozwolić X z{......};
gdzie wszystko wewnątrz szelki że byłoby initializer prawną x2
, jest akceptowana i czy faktycznie zainicjować x2
?
"* Czy istnieje sposób, aby to działało" *, usunąć konstruktora lub użyj 'std :: string' jako typ' buf' –
pisanie ' 'a', 'b',” c ',' \ 0'' zamiast '" abc "' działa z VS używając C++ 17 –