У меня есть 2 базовых класса.Первый содержит список функций обратного вызова:
class BaseCallbacks {
public:
virtual void callback1() = 0;
virtual void callback2() = 0;
virtual ~BaseCallbacks(){};
};
Второй класс просто содержит некоторую логику, которая является общей для всех версий моего будущего специализированного класса:
class BaseClass{
public:
BaseClass();
void some_function();
};
Существует также внешний классэто позволяет мне взаимодействовать с другим приложением:
class InterfaceClass {
public:
InterfaceClass(int x, int y, BaseCallbacks &callbacks);
virtual ~InterfaceClass(){};
};
Одна из специализированных версий моего производного класса будет выглядеть примерно так:
enum TYPE{TYPE1,TYPE2};
template<bool B, TYPE T>
class DerivedClass : public BaseClass, public BaseCallbacks
{
public:
DerivedClass(int a);
virtual void callback1() override;
virtual void callback2() override;
};
И следующее вызывает ошибку компилятора:
int main()
{
DerivedClass<true, TYPE::TYPE1> D1(666);
auto interface_ptr = std::make_shared<InterfaceClass>(111, 222, &D1);
}
Компилятор Visual Studio говорит, что: «ошибка C2664:« InterfaceClass :: InterfaceClass (InterfaceClass &) »: невозможно преобразовать аргумент 3 из« DerivedClass »в« BaseCallbacks ».
Насколько я понимаю, компилятор не может понять, что мой объект DerivedClass содержит необходимые обратные вызовы.Вопрос почему?
Я подозреваю, что шаблоны и множественное наследование как-то связаны с этим.Ребята, не могли бы вы пролить свет на этот вопрос?Заранее спасибо.