2017-04-07 147 views
-3

我一直在网上寻找一段时间,而且还没有发现任何与我的问题完全相同的内容。我使用了这个东西定义一个类:如何在C/C++中将typedef函数作为参数传递

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()。

任何帮助将不胜感激!

+1

C没有类。 – melpomene

+0

typedef只是将一个标识符声明为一个类型的别名。在这种情况下,该类型是特定的函数类型,并且您正在将指针传递给该类型的函数。您可以通过取消引用指针来调用指向函数来获取函数指示符,然后用它形成一个函数调用表达式:'(* progress_callback)(0.5)'。 –

+1

[无法重现](http://coliru.stacked-crooked.com/a/cfb3cb3a017f5269)。请提供[mcve]。 – Angew

回答

1

解决了!我需要明确地声明一个调用约定来做到这一点。因此,我改变:

bool MyCallbackFunction(double progress){ 
    return true; 
} 

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

,似乎现在接受它。

2

使用

typedef bool (*ProgressCallback)(double progress); 

定义ProgressCallback

然后,您可以使用

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

我想这样做,但它不是我的图书馆来修改,所以我有点卡住他们给我的东西。 – AnotherProgrammer

相关问题