В C ++ чисто виртуальные классы часто используются для полиморфизма во время выполнения.
Итак, у вас есть:
class IInterfaceA
{
virtual void DoFoo() = 0;
};
И производные классы, такие как:
class CFancyObject : public IInterfaceA
{
...
Какие тогдаможет использоваться в таких функциях, как:
void Foo(IInterfaceA &interface);
Но это случай выполнения, и если объекты известны во время компиляции, мы можем добиться большего успеха, используя CRTP:
template<class T> class IInterfaceA
{
public:
void DoFoo()
{
static_cast<T*>(this)->CallDerivedFunction();
}
}
class CFancyObject : public IInterfaceA<CFancyObject>
{
...
}
Isможно использовать производные классы на основе CRTP в функциях, которые принимают IInterface в качестве параметра?
void Foo(IInterfaceA<?> &interface);