类型转换或将函数调用函数指针?

时间:2014-10-01 08:12:06

标签: c++

我的代码需要test这样的函数。第三方希望它像test2。使用下面的代码,我可以将功能test分配给fn1fn3rdParty,但我不知道如何使fn1fn3rdParty一起使用

错误

  

错误C2440:'type cast':无法从'std :: function'转换为'void *(__ cdecl *)(void *)'

代码

class Data {};
void*test(Data*data) { return 0; }
void*test2(void*data) { return 0; }

function<void*(Data*)> fn1 = test;
void*(*fn3rdParty)(void*) = test2;
fn3rdParty = (void*(*)(void*))test;
fn3rdParty = (void*(*)(void*))fn1;//error

1 个答案:

答案 0 :(得分:0)

  

但我不知道如何让fn1与fn3rdParty合作

试试这个:

// this is outside your code's scope, as a
// local function (eventually placed in a namespace)
void adapt_fn1(void* data) { return fn1( reinterpret_cast<Data*>(data); }

// client code:
fn3rdParty = adapt_fn1;

也就是说,如果您可以调整服务器代码(强制执行#34;测试&#34;等功能的代码)来预期std::function<void()>,那么您将能够插入任何内容(如果您在客户端代码中没有匹配的签名,则可以使用传递给std::function<void(void)>的lambda。