If I have a class like: Vector<T>
(a template class), and now I want to specialize it: Vector<int>
. How can I inherit from Vector<T>
?
My code is:
template<typename T> class Vector&<int>:public Vector <T>
But it gives error:
template parameters not deducible in partial specialization.
How should I deal with it?
I don't actually mean I want to use in Vector. But I want to understand what's wrong in langugae aspect?
Is that means specilization class can't inherit from other template classes?
CodePudding user response:
It looks like you want the specialised Vector<int>
to inherit from the general Vector<int>
. This is not possible as is, because there can be only one Vector<int>
, but with a little trick you can do it. Just add another template parameter, a boolean non-type with a default value. Now for each T
, there are two different Vector<T, b>
, one for each possible b
.
template <class T, bool = true>
class Vector
{ void whatever(); };
Regular users just use Vector<float>
or Vector<int>
without explicitly passing the second argument. But specialisations can pass false
if they need to.
template<>
class Vector<int, true> : public Vector<int, false>
{ int additional_member; };