#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
}
Die letzte Zeile gibt Fehler: 17 : error: invalid conversion from 'const char*' to 'char' [-fpermissive]
Perfect Forwarding schlägt fehl, wenn Ziel mit Array-Aggregat ist
Wenn ich std::forward(args)...
statt args...
dann noch mehr Fehler kommen; und außerdem gibt es Fehler, wenn ich versuche, {'a', 'b', 'c', '\0'}
als Initialisierer anstelle des Zeichenfolgenliterals zu verwenden.
Gibt es eine Möglichkeit, diese Arbeit zu machen, damit das heißt X z{......};
, wo alles in den Klammern, die eine rechtliche Initialisierer für x2
sein würde, angenommen wird und dadurch nicht in x2
initialisieren?
"* Gibt es eine Möglichkeit, diese Arbeit zu machen" *, entfernen Sie den Konstruktor, oder verwenden Sie 'std :: string' als Art der' buf' –
Schreiben ' 'a', 'b',‘ c ',' \ 0'' statt '" abc "' arbeitet mit VS unter Verwendung von C++ 17 –