Re: Multiple inheritance/interface delegate through template function not working
Two compilers choke on it. Actually one works, but only if not using
an 'ISO C++ Template Parser.'
The code must be:
#include <iostream>
class PureVirtual
{
public:
virtual void VirtFun() = 0;
};
template <long I, class T>
class TPureVirtual : public PureVirtual
{
public:
virtual void VirtFun()
{
// 1.
static_cast<T&>(*this).Done(I);
// 2.
static_cast<T&>(*this).template TDone<I>();
}
};
class ImplVirtual : public TPureVirtual<1, ImplVirtual>,
public TPureVirtual<2,
ImplVirtual>
{
public:
void
Done(long I)
{
std::cout << "ImplVirtual<" << I << ">::Done" <<
std::endl;
}
template <long I> void
TDone()
{
std::cout << "ImplVirtual<" << I << ">::TDone" <<
std::endl;
}
};
//Main should not have explicit linkage specification
int main()
{
ImplVirtual impl;
TPureVirtual<1, ImplVirtual> *pv1 = &impl;//no need to do
explicit cast here
pv1->VirtFun();
TPureVirtual<2, ImplVirtual> *pv2 = &impl;//no need to do
explicit cast here
pv2->VirtFun();
return 0;
}
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]