调用从另一个函数c ++定义的函数

时间:2012-10-18 14:39:27

标签: c++

我想知道如何在我定义函数的地方创建一个函数。然后我可以调用已定义的函数。让我试试一个例子。

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

我希望你明白我在这里要做的事情。但我不知道如何将其归结为正确的代码: - )

3 个答案:

答案 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(广义回调)