variadic functions sans stdarg ?
Bonjour tout le monde,
voilà je me remet au C++ après des années de sommeil :)
J'étais en train de faire des tests sur des variadic templates et je me suis demandé s'il y avait possibilité d'itérer plus "modernement" sur la liste des arguments d'une variadic function qu'avec les fonctions de la SL :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <vector>
template <class T>
class A
{
private :
std::vector<T> v;
public :
A(T& ts...);
};
template <class T>
A<T>::A(T& ts...)
{
std::vector<T> temp = { ts... };
for (auto t : temp)
v.push_back(t);
} |
Le compilateur me répond que je fais une mauvaise utilisation de "ts..." car, je cite :) :
Citation:
||=== Build: Debug in POO (compiler: GNU GCC Compiler) ===|
POO\main.cpp||In constructor 'A<T>::A(T&, ...)': |
POO\main.cpp|32|error: expansion pattern 'ts' contains no argument packs|
POO\main.cpp||In instantiation of 'A<T>::A(T&, ...) [with T = int]': |
POO\main.cpp|40|required from here|
main.cpp|32|error: could not convert '{<expression error>}' from '<brace-enclosed initializer list>' to 'std::vector<int, std::allocator<int> >'|
||=== Build failed: 2 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
N'y a-t'il pas une manière plus ou moins aussi élégante de parcourir ce type de liste ?
Merci d'avance