Re: Template multiple inheritance Organization: Roundhouse Consulting, Ltd.
Sure. Do the same thing you'd do if you had two non-template bases.
--
Pete
That's what I thought but either I don't understand it (obviously...)
or the compiler doesn't support it. Here's a more complete example,
compiled with VS 2008:
class MyData
{};
struct BaseType
{
BaseType() {}
virtual ~BaseType() {}
virtual void execute() = 0;
virtual void connectTo(BaseType * dest, int outputPort, int
inputPort) = 0;
};
template <typename T>
struct Provider : virtual public BaseType
{
virtual ~Provider() {}
virtual T getValue() const = 0;
};
template <typename T, int port>
struct PortProvider : public Provider<T>
{
virtual ~PortProvider() {}
virtual T getValue() const
{
return getPortValue();
}
virtual T getPortValue() const = 0;
};
class BS :
public PortProvider<MyData, 1>,
public PortProvider<MyData, 2>
{
public:
BS() : PortProvider<MyData, 1>(), PortProvider<MyData, 2>()
{}
virtual ~BS()
{}
virtual MyData PortProvider<MyData, 1>::getPortValue() const
{}
virtual MyData PortProvider<MyData, 2>::getPortValue() const
{}
virtual void execute()
{}
virtual void connectTo(BaseType * dest, int outputPort, int
inputPort)
{}
};
int _tmain(int argc, _TCHAR* argv[])
{
BS * bs1(new BS);
return 0;
}
Error messages include:
error C3241: 'MyData BS::getPortValue(void)' : this method was not
introduced by 'PortProvider<T,port>'
error C2259: 'BS' : cannot instantiate abstract class due to following
members:
1> 'MyData PortProvider<T,port>::getPortValue(void) const' : is
abstract
Thanks.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]