std::initializer_list mit referenzen
-
Moin,
ich würde gerne viele und große Vektoren an eine Funktion übergeben. std::initializer_list scheint aber nicht mit Referenzen arbeiten zu können, ohne vector-Referenz funktioniert es, nur leider habe ich da Bedenken bzgl. der Effizienz bei größeren Datenmengen.
Folgende Meldung gibt mir gcc 4.7.2:
error: forming pointer to reference type 'const std::vector<float>&'
void foo(std::initializer_list<const std::vector<float>&> values) { // ... } int main() { std::vector<float> x {1,2,3,4}; std::vector<float> y {7,8,9,10}; foo({x,y}); }
-
Zeiger?
-
Ist das nicht ein Missbrauch von
std::initializer_list
?
std::initializer_list
ist nicht dazu gedacht, ein Container zu ersetzen. Das hier wär doch eher was für
variadic templates
.
-
@out: Danke, so gehts. Muss mich in den neuen Standard noch einarbeiten.
void bar() {} template <typename ...Tail> void bar(const std::vector<float>& head, Tail ...tail) { //do something with head bar(tail...); } int main() { std::vector<float> x {1,2,3,4}; std::vector<float> y {7,8,9,10}; bar(x,y); }
-
void bar(const std::vector<float>& head, Tail const& ...tail)
Du willst doch schließlich die Kopie sparen...?