私は継承を持つ2つのクラスを持っています。クラスに関数を1つのマップに格納できるようにしたい。キーで検索機能を作成するにはどうすればよいですか?関数の継承(MyClass_2は独自のdoSmth()関数を持たないので、MyClassからdoSmth()を追加する必要があります)?私の試みは以下の通りです:メンバー関数のマップのためのC++のfind()
template<class T>
class Class1
{
typedef void(T::*MyFunction)();
map<string, MyFunction> functionMap;
public:
void addFunc(string funcName, MyFunction function) {
functionMap.insert(pair<string, MyFunction>(funcName, function));
}
bool findFunc(string key) {
typename map<string, MyFunction>::iterator it;
it = functionMap.find(key.c_str());
}
};
class MyClass {
Class1<MyClass> class1;
void addFunc() {
class1.addFunc("Func1", &MyClass::doSmth);
}
void findAndCallFunc(string key) {
class1.findFunc(key);
}
void doSmth();
};
class MyClass_2: MyClass {
Class1<MyClass_2> class1;
void addFunc() {
class1.addFunc("Func1", &MyClass_2::doSmth);
}
}
EDIT:私は私のプログラムの開発をテストしました。できます。私の問題は、MyClass_2のオブジェクトからfundAndCallFuncを呼び出す場合です。 MyClass_2のclass1ではなく、MyClassのclass1を取ります。 変更する必要はありますか?