如何在C / C ++中将typedef函数作为参数传递

时间:2017-04-07 17:46:03

标签: c++ c

我一直在网上寻找一段时间,但我找不到任何与我的问题完全相同的东西。我正在使用一个定义了这个东西的类:

typedef bool ProgressCallback(double progress);

然后有一个函数使用它如下:

// The documentation says that it will call progress_callback()
// during the write where the progress parameter = percentage complete
void WriteToFile(char* filename, ProgressCallback* progress_callback)

我应该如何调用此函数?它主要是typedef语法让我失望,因为将函数作为参数传递通常并不困难。这是我尝试过的:

// Apparently I can't just say "Progress Callback MyCallback{}"
// Since it gives me "function type may not come from a typedef" error
bool MyCallbackFunction(double progress){
    return true;
}

void OtherFunction(){

    // Can't assign. I get "a value type of bool (*)(double progress)" cannot be
    // used to initalize an entity of type ProgressCallback*" error.
    ProgressCallback* myfunction = MyCallbackFunction;
    WriteToFile("Test.txt", myfunction);
}

显然我知道我做错了。但这是我得到的最接近的。我完全不知道我应该如何将该参数传递给WriteToFile()。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

使用

typedef bool (*ProgressCallback)(double progress);

定义ProgressCallback

然后,您可以使用

ProgressCallback myfunction = MyCallbackFunction;
WriteToFile("Test.txt", myfunction);

答案 1 :(得分:1)

解决!我需要显式声明一个调用约定来执行此操作。所以我改变了:

bool MyCallbackFunction(double progress){
    return true;
}

bool __stdcall MyCallbackFunction(double progress){
    return true;
}

现在似乎接受了它。