我甚至無法輸入示例代碼...非常丟失。這是我的原始函數,它不是一個lambda函數(我希望它是lambda)。C++如何獲得一個指向lambda函數的void指針?
static void* DoublePointer(void** arg, int arg_sz) {
double* n1 = In(arg[0]);
double* n2 = In(arg[1]);
double* n3 = In(arg[arg_sz-1]);
*n3 = *n1 + *n2;
return n3;
}
void* func_ptr = DoublePointr; //works fine
但我真正想要的是這樣的:
my_class.save_the_func = [](void** arg, int arg_sz) {
double* n1 = In(arg[0]);
double* n2 = In(arg[1]);
double* n3 = In(arg[arg_sz-1]);
*n3 = *n1 + *n2;
return n3;
}
my_class.point_to_func = save_the_func // point_to_func is the void* member
你有什麼需要做的,最終得到一個void *指向lambda函數?就像我說的,一個非lambda函數工作得很好。
我之所以要這樣說是因爲最終我想我的代碼看起來像這樣:
std::vector<function_entry> MyFuncEntry ={
add_function("MRP_DoublePointer2", "double", "double,double", "n1,n2", "add two numbers",
[](void** arg, int arg_sz)->void* {
double* n1 = In(arg[0]);
double* n2 = In(arg[1]);
double* n3 = In(arg[arg_sz-1]);
*n3 = *n1 + *n2;
return n3;
}),
add_function("MRP_DoublePointer3", "double", "double,double", "n1,n2", "add two numbers",
[](void** arg, int arg_sz)->void* {
double* n1 = In(arg[0]);
double* n2 = In(arg[1]);
double* n3 = In(arg[arg_sz-1]);
*n3 = *n1 + *n2;
return n3;
})
};
換句話說,我希望定義一個函數,並在同一個地方的一些其它需要的參數。 Add_function返回一個function_entry類,它包含一些字符串和lambda函數,基本上我試圖在函數旁邊定義這些字符串,所以它更容易維護,它不在兩個不同的地方。
如果這是壞/計算昂貴,那麼我想我應該堅持使用非lambda。
爲什麼使用'無處不在*? – Jarod42
我別無選擇,我正在與另一個採用void *的軟件API進行交互,並且參數必須是void **和int。 –
因爲lambda是非捕獲的,所以你應該可以在lambda前加一個一元'+'來強制它衰減到一個普通的函數指針。更多信息請訪問:http://stackoverflow.com/q/18889028/1553090 – paddy