我的代码需要test
这样的函数。第三方希望它像test2。使用下面的代码,我可以将功能test
分配给fn1
和fn3rdParty
,但我不知道如何使fn1
与fn3rdParty
一起使用
错误
错误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
答案 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。