I have found a few posts here and there and on avr freaks about there being problems with pure virtual methods. Has there been a good fix for this yet? I just ran across the problem using Arduino 0022.
On a PC, it is possible for the run-time library to trap a call to a pure virtual function and do something useful; typically report a run-time error and terminate the application. The same is not true for a microcontroller. How is the application terminated? How should the fault be reported? How much code space are you willing to give up to be able to trap the fault?
I suggest avoiding pure virtual functions.
Is there any other way to do "interfaces" in C++, other than using pure abstract classes?
Iain
Yes. ABCs are a special case in that they can not be directly instantiated - they can only be used as a base class. You are always free to use non-ABCs for your base classes. Simply declare the methods virtual and provide a default implementation. Override the default behavior in your derived class with whichever implementation you desire.
class Interface
{
public:
virtual unsigned AddRef( void ) = 0;
};
class Whatever : public Interface
{
public:
virtual unsigned AddRef( void )
{
return( ++_refs );
}
private:
unsigned _refs;
};
void setup( void )
{
Whatever t;
Interface* i;
i = &t;
i->AddRef();
}
void loop( void )
{
}
A better choice...
class Interface
{
public:
virtual unsigned AddRef( void )
{
return( 0 );
}
};
@davez5: What are the problems?