#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
}
L'ultima riga fornisce errore: 17 : error: invalid conversion from 'const char*' to 'char' [-fpermissive]
perfetta trasmissione fallisce quando il bersaglio è aggregato con matrice
Se uso std::forward(args)...
anziché args...
allora anche più errori venire; e inoltre ci sono errori se provo a usare {'a', 'b', 'c', '\0'}
come inizializzatore invece della stringa letterale.
C'è un modo per fare questo lavoro, vale a dire consentire X z{......};
dove tutto all'interno delle parentesi graffe che sarebbe un inizializzatore legale per x2
, viene accettato e in effetti inizializza x2
?
"* C'è un modo per fare questo lavoro" *, rimuovere il costruttore, o utilizzare 'std :: STRING' come il tipo di' buf' –
scrittura ' 'a', 'b',' c ',' \ 0'' invece di '" abc "' funziona con VS usando C++ 17 –