template classes: inheritance problem
I have a problem with template classes and inheritance. Template class
Derived
inherits from Base. I have two specialisation classes (Derived<1> and
Derived<2>)
Factory method createInstance reports error unless ": public Base" added
also.
Are specialisations really that unrelated? Also common members cannot remain
in original Derived class. That is data_ is not seen in Derived<1>. Is there
some
way around this?
#include <iostream>
class Base {
public:
virtual void foo() = 0;
};
template<int T = 0>
class Derived : public Base {
public:
virtual void foo() { /* default does nothing */ }
// private:
// int data_; // <== PROBLEM #2: not seen in Derived<1>
};
template<>
class Derived<1> /* : public Base */ { // <== PROBLEM #1: must be added
public:
virtual void foo() { std::cout << "Derived<1>::foo"; }
};
template<>
class Derived<2> /* : public Base */ { // <== PROBLEM #1 must be added
public:
virtual void foo() { std::cout << "Derived<2>::foo"; }
};
class Factory {
public:
static Base& createInstance(int i);
};
Base& Factory::createInstance(int i) {
// let's ignore this for a moment: returning address of local variable
or temporary
switch(i)
{
case 1:
// error C2440: 'return' : cannot convert from 'Derived<1>' to
'Base &'
return Derived<1>();
case 2:
// error C2440: 'return' : cannot convert from 'Derived<1>' to
'Base &'
return Derived<2>();
}
return Derived<0>();
}
void main() {
Base& anInstance = Factory::createInstance(1);
Base& anotherInstance = Factory::createInstance(2);
}
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]