関数を保持して後で呼び出すことができるクラスを作成しようとしています。関数の名前を保持する文字列とともに、関数をマップに格納します。
LinuxでGCCを使用してこれを実行しようとすると、次のエラーが発生"invalid conversion from void(*)() to void *"
しました。functionsMap[nameOfFunction] = func;
これが私がこれまでに持っているプログラム全体です。まだ完了していませんが、なぜこれがGCCではなくVisualC++でコンパイルされるのか非常に興味があります。私が何か間違ったことをしている、またはもっと良いことをしている可能性がある場合は、私に知らせてください。ありがとう!
#include <iostream>
#include <map>
#include <string>
using namespace std;
class Dyn_Class{
private:
map<string, void *> functionsMap;
public:
Dyn_Class(){}
template<typename ReturnValue>
void add_func( string nameOfFunction, ReturnValue(*func)() ){
functionsMap[nameOfFunction] = func;
}
void remove_func( string nameOfFunction ){
}
Dyn_Class operator()(string nameOfFunction){
}
};
void print(void){
for(int index = 0; index < 9; index++){
cout << index << " ";
}
cout << endl;
}
int main(){
Dyn_Class functionsList;
functionsList.add_func("print", print);
return 0;
}