나는 함수를 호출하고 나중에 호출 할 수있는 클래스를 만들려고합니다. 함수의 이름을 저장하는 문자열과 함께 함수를 맵에 저장합니다. GCC에서 C++ 함수 포인터 클래스가 컴파일되지 않습니까?
나는 GCC와 리눅스에서이 일을 시도하고 다음과 같은 오류가 발생했습니다 :"invalid conversion from void(*)() to void *"
을 줄
functionsMap[nameOfFunction] = func;
에 여기에 지금까지 가지고있는 전체 프로그램입니다. 아직 완료되지는 않았지만 GCC가 아닌 Visual C++에서 왜 컴파일 될지 궁금합니다. 내가 잘못한 일을하거나 더 나은 일을 할 수 있다면 저에게 알려주십시오. 감사! (하지 않는 한
std::map<std::string, void(*)()> functionsMap;
가 add_func
ReturnValue = void
인스턴스화하는 경우에만 작동으로 템플릿을 만드는 아무 소용이 없다 :
#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;
}
가변 수의 함수를 사용하려면 어떻게해야합니까? 인수를 가진 함수를 받아들이도록 add_func를 오버로드 했습니까? – Cuthbert
@ d2jxp : 함수 서명이 함수 포인터 유형의 일부이기 때문에 함수 포인터를 사용하여이를 수행 할 수 없습니다. 지도에서 가져온 기능을 올바르게 호출하는 방법은 무엇입니까? –