Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储在std::function中时,无法将无CaptureLambda转换为函数指针 通常是一个C++的lambda,没有捕获到C样式函数指针。不知何故,使用std::function::target转换它不起作用(即返回null ptr),而且target_类型与签名类型不匹配,即使它看起来是相同的_C++_C++11_Syntax_Lambda_Function Pointers - Fatal编程技术网

存储在std::function中时,无法将无CaptureLambda转换为函数指针 通常是一个C++的lambda,没有捕获到C样式函数指针。不知何故,使用std::function::target转换它不起作用(即返回null ptr),而且target_类型与签名类型不匹配,即使它看起来是相同的

存储在std::function中时,无法将无CaptureLambda转换为函数指针 通常是一个C++的lambda,没有捕获到C样式函数指针。不知何故,使用std::function::target转换它不起作用(即返回null ptr),而且target_类型与签名类型不匹配,即使它看起来是相同的,c++,c++11,syntax,lambda,function-pointers,C++,C++11,Syntax,Lambda,Function Pointers,在VC13和GCC 5.3/5.2.0/4.8上测试 最小测试示例: #include <functional> #include <iostream> void Maybe() { } void callMe(std::function<void()> callback) { typedef void (*ftype)(); std::cout << (callback.target_type() == typeid(fty

在VC13和GCC 5.3/5.2.0/4.8上测试

最小测试示例:

#include <functional>
#include <iostream>

void Maybe() {

}

void callMe(std::function<void()> callback) {
    typedef void (*ftype)();
    std::cout << (callback.target_type() == typeid(ftype)) << std::endl;
    std::cout << callback.target<ftype>() << std::endl;
}

int main() {
    callMe([] () {});
    callMe(Maybe);
}
#包括
#包括
可能无效{
}
void callMe(std::函数回调){
typedef void(*ftype)();

std::cout在您的第一次调用中,
std::function
不需要将lambda分解成指针,它只是将lambda与其实际类型(实际上不是
void()
)一起存储

只需使用一元
+
,就可以在使用后者构造
std::函数之前,强制lambda衰减为指针:

callMe(+[](){});
//     ^

“…应可转换为…”-需要引用。@Hmmm,.@πάνταῥεῖ 谢谢,我把它包括在问题+1中,但是:我真的不喜欢这种整型/指针型强制的
+
破解。它太模糊了意图。最好通过将其包装到专用函数中来明确它。因此我们发现了一个?@πάντα的副本ῥεῖ 它们并不是严格重复的(其他的是关于类型推断和重载解析),但它们确实有很强的相关性。@KonradRudolph我想这是一个习惯的问题。将它隐藏在
衰减(T&&)
函数后面也不会让我感到困扰。
0
0
1
<address>
callMe(+[](){});
//     ^