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! ]