Хорошо, сначала пример кода; это моя попытка сообщить, что я пытаюсь сделать, хотя она не компилируется:
#include <iostream>
template <class T>
class Base
{
public:
virtual void my_callback() = 0;
};
class Derived1
: public Base<int>
, public Base<float>
{
public:
void my_callback<int>()
{
cout << "Int callback for Derived1.\n";
}
void my_callback<float>()
{
cout << "Float callback for Derived\n";
}
};
class Derived2
: public Base<int>
, public Base<float>
{
public:
void my_callback<int>()
{
cout << "Int callback for Derived2.\n";
}
void my_callback<float>()
{
cout << "Float callback for Derived2\n";
}
};
int main()
{
{
Derived1 d;
Base<int> * i_p = d;
Base<float> * i_f = d;
i_p->my_callback();
i_f->my_callback();
}
{
Derived2 d;
Base<int> * i_p = d;
Base<float> * i_f = d;
i_p->my_callback();
i_f->my_callback();
}
//Desired output:
// Int callback for Derived1.
// Float callback for Derived1
// Int callback for Derived2.
// Float callback for Derived2
system("Pause");
}
Итак, что я пытаюсь сделать, так это создать своего рода класс-оболочку для наследования, который будет автоматически подключать производный класс к различным спискам обратного вызова; ему нужно подключить конкретный экземпляр производного класса к списку, и я хочу, чтобы «пользователь» имел/получил возможность выполнять функции обратного вызова как часть создания производного класса, как вы можете видеть.
Похоже, это должно работать, хотя мне может понадобиться использовать другой синтаксис. Если это не сработает, есть ли у вас какие-либо предложения?