Écrit variadic template constructeur

J'ai demandé récemment à cette question, mais maintenant, je tiens à le développer. J'ai écrit la classe suivante:

template <class T>
class X{
public:
    vector<T> v;
    template <class T>
    X(T n) {
        v.push_back(n);
    }
    template <class T, class... T2>
    X(T n, T2... rest) {
        v.push_back(n);
        X(rest...);
    }
};

Lors de la création d'un objet à l'aide

X<int> obj(1, 2, 3);  //obj.v containts only 1

Vecteur ne contient que la première valeur, mais pas d'autres. J'ai vérifié et vu que le constructeur est appelé 3 fois, donc je suis probablement la création d'une temp objets et de remplissage de leurs vecteurs, avec le reste des arguments. Comment puis-je résoudre ce problème?

Pourquoi ne pas simplement template <typename ...Args> X(Args ...args) : v({args...}) {}?
Génial! Merci.
Votre classe ne devrait vraiment se std::initializer_list<T> argument au lieu d'avoir un variadic template constructeur. C'est idiomatiques.
Je suis nouveau en C++11, donc encore de l'apprentissage.

OriginalL'auteur Tracer | 2015-03-04