В C++ чистые виртуальные классы часто используются для полиморфизма времени выполнения.Можете ли вы использовать CRTP и функции с интерфейсом в качестве параметра?
Так у вас есть:
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>
{
...
}
Возможно ли использовать производные классы на основе CRTP в функциях, которые принимают IInterface в качестве параметра?
void Foo(IInterfaceA<?> &interface);
Не можете ли вы иметь не-шаблонный базовый интерфейс, из которого наследуется шаблонный интерфейс? – Nick
@Nick: Но он должен вызывать функцию-член производного класса, который должен быть рассчитан во время компиляции. Я не совсем понимаю, как это описать в коде. – Coder