Моя проблема немного сложная. У меня есть один класс (e: Component), в котором есть объекты портов. Когда компонент создает объект порта, он передает один из своих методов конструктору порта.
Сигнатуры методов:
typedef std::vector<std::string> (Component::*ComponentMethod)(std::vector<std::string>);
Он отлично работает, если я:
// in class Component
std::vector<std::string> Component::test_method( std::vector<std::string> ) {
std::cout << "Hello !\n";
// Do stuff
}
// Port ctor : Port( ComponentMethod callback );
Port* p = new Port(&Component::test_method);
Что ж ... теперь моя проблема в том, что я создаю подклассы класса Component, и я не знаю, как передавать методы подклассов в порт.
// in class SubtypeComponent
std::vector<std::string> SubtypeComponent::test_method2( std::vector<std::string> ) {
std::cout << "Hello !\n";
// Do stuff
}
// Port ctor : Port( ComponentMethod callback );
Port* p = new Port(&SubtypeComponent::test_method2);
// ERROR :'(
Это кажется нормальным: я думаю, компилятор ожидает именно Component (only) метод.
-> Я ищу решение для «динамического» назначения методов в портах (но я не думаю, что это возможно)
-> Может, другое решение - использование шаблонов? (определение «указателей методов шаблона» вместо «указателей методов компонентов»), но я не уверен.
Любая помощь будет оценена :)