Pourquoi ce code ne compile-t-il pas?Arguments du modèle C++ dans le constructeur
template <class T>
class A
{
public:
A(T t) : t_(t) {}
private:
T t_;
};
int main()
{
A a(5.5);
// A<double> a(5.5); // that's what i don't want to do
}
Je souhaite que les arguments de modèle soient implicites.
Comme dans cet exemple:
template<class T>
T Foo(T t) { return t; }
// usage:
Foo(5.5);
MISE À JOUR: langage constructeur nommé n'est pas acceptable pour moi. Je veux utiliser cette classe pour RAII. La seule façon de le faire est const A& a = A::MakeA(t)
, mais c'est moche!
La réponse courte est "vous ne pouvez pas". Les modèles de classe ne fonctionnent tout simplement pas de cette façon. Je vais laisser à quelqu'un d'autre le soin d'expliquer la raison. –