views:

177

answers:

2

Hi, I have non-template class with a templatized constructor. This code compiles for me. But i remember that somewhere i have referred that constructors cannot be templates. Can someone explain whether this is a valid usage?

typedef double Vector;

//enum Method {A, B, C, D, E, F};
struct A {};

class Butcher
{
public:
 template <class Method>
 Butcher(Method);


private:
 Vector a, b, c;
};

template <>
Butcher::Butcher(struct A)
: a(2), b(4), c(2)
{
 // a = 0.5, 1;
 // b = -1, 1, 3, 2;
 // c = 0, 1;
}

Thanks, Gokul.

+11  A: 

It's perfectly valid for constructors to be template members. The only thing that I can think that you might be think of is that a template constructor is never a copy constructor so a template constructor won't itself prevent the generation of a compiler generated copy constructor.

Charles Bailey
it took 2 minutes to understand what you mean in second sentence:)
chester89
Might be better to say that "copy constructors cannot be template members."
John Dibling
+7  A: 

Yes, constructors can be templates.

Andreas Brinck