Ich versuche, den folgenden Code funktionieren zu
Code: Select all
#include
template
void g(std::tuple args) {}
int main() {
g({1, 'a', 0.4}); // does not work
g({1, 'a', 0.4}); // works
g(std::tuple{1, 'a', 0.4}); // works
}
Dies ist bereits überraschend, weil ich erwartet hatte, dass der Typ std :: tuple . Weitere Untersuchungen haben gezeigt, dass der Compiler in der Lage ist, den Typ eines std :: initializer_list in Folgendes korrekt abzuleiten: < /p>
Code: Select all
#include
template
void f(std::initializer_list arg) {}
int main() {
f({1, 2, 3}); // works
f({1, 2, 3}); // works
f(std::initializer_list{1, 2, 3}); // works
}
< /code>
Dies ist dem eigentlichen Ziel sehr nahe, aber es funktioniert nur, wenn die Typen der Objekte in der Liste gleich sind. Mein erster Ansatz war es, die Implementierung von std :: initializer_list zu betrachten und sie selbst zu implementieren, aber ich scheine nicht einmal das F ({1, 2, 3}) zu erhalten.
Ist es möglich, Ihre eigene init_list so f ({1, 2, 3}) zu implementieren. 0.4}); Arbeit?>