我想知道如何在我定义函数的地方创建一个函数。然后我可以调用已定义的函数。让我试试一个例子。
void funcToCall() {
std::cout<<"Hello World"<<std::endl;
}
void setFuncToCall(void func) {
//Define some variable with func
}
void testFuncCall() {
//Call function that has been defined in the setFuncToCall
}
setFuncToCall(funcToCall()); //Set function to call
testFuncCall(); //Call the function that has been defined
我希望你明白我在这里要做的事情。但我不知道如何将其归结为正确的代码: - )
答案 0 :(得分:4)
你需要一个函数指针。如果你首先typedef
,那么使用函数指针会更容易。
typedef void (*FuncToCallType)();
FuncToCallType globalFunction; // a variable that points to a function
void setFuncToCall(FuncToCallType func) {
globalFunction = func;
}
void testFuncCall() {
globalFunction();
}
setFuncToCall( funcToCall ); //Set function to call,NOTE: no parentheses - just the name
testFuncCall(); //Call the function that has been defined
正如其他答案所暗示的那样,你也可以使用像函数这样的对象。但这需要运算符重载(即使它仍然对您隐藏),并且通常与模板一起使用。
它提供了更大的灵活性(您可以在将对象传递给函数之前为对象设置一些状态,并且对象的operator()
可以使用该状态)但在您的情况下,函数指针可能同样好。
答案 1 :(得分:2)
函数指针的C语法有点奇怪,但我们走了:
// this is a global variable to hold a function pointer of type: void (*)(void)
static void (*funcp)(void);
// you can typedef it like this:
//typedef void (*func_t)(void);
// - now `func_t` is a type of a pointer to a function void -> void
// here `func` is the name of the argument of type `func_t`
void setFuncToCall(void (*func)(void)) {
// or just: void setFuncToCall(func_t func) {
//Define some variable with func
...
funcp = func;
}
void testFuncCall(void) {
//Call function that has been defined in the setFuncToCall
funcp();
}
setFuncToCall(funcToCall); // without () !
testFuncCall();
答案 2 :(得分:2)
您想要使用的是回调,并且已经回答了她:Callback functions in c++
我建议你使用std::tr1::function
(广义回调)