私の問題は少し複雑です。Ports オブジェクトを持つ 1 つのクラス (e: コンポーネント) があります。Component が Port オブジェクトを作成するとき、そのメソッドの 1 つを Port コンストラクターに渡します。
メソッドのシグネチャ :
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);
さて...今、私の問題は、コンポーネント クラスのサブクラスを作成し、サブクラス メソッドをポートに渡す方法がわからないことです。
// 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 :'(
それは正常なようです:コンパイラは正確にコンポーネント(のみ)メソッドを期待していると思います。
--> Ports でメソッドを「動的に」割り当てるための解決策を探しています (しかし、これが可能だとは思いません)。
--> 多分別の解決策はテンプレートの使用でしょうか? (「コンポーネントメソッドポインター」ではなく「テンプレートメソッドポインター」を定義しています)が、よくわかりません。
どんな助けでも大歓迎です:)