Codice:
#include <iostream>
using namespace std;
class I
{
public:
virtual void fI()=0;
};
class I2:virtual public I
{
public:
virtual void fI2()=0;
};
class IImpl:virtual public I
{
public:
void fI(){ cerr << "fI()" << endl;}
};
template<typename T>
class I2Impl:public I2,public IImpl
{
public:
void fI2(){ cerr << T(0) << endl; }
};
int main()
{
I2Impl<bool> x;
x.fI();
x.fI2();
}
Questo funziona, occhio che i secondi "virtual" di cui parlavo sono quelle nella dichiarazione della classe, non del metodo.