C++ 错误:无法转换‘&书信电报;兰姆达(双)>’;至‘;双(*)(双)和#x2019;
我有这个错误C++ 错误:无法转换‘&书信电报;兰姆达(双)>’;至‘;双(*)(双)和#x2019;,c++,c++11,lambda,function-pointers,member-functions,C++,C++11,Lambda,Function Pointers,Member Functions,我有这个错误 error: cannot convert ‘<lambda(double)>’ to ‘double (*)(double)’ 例如,当我没有通过声明alea是全局的来捕获它时,它就起作用了。但是当我在函数g++的作用域中声明alea时,会显示此错误 你知道问题出在哪里吗?我如何通过让我的函数保持alea本地来解决问题?std::function专门用于处理捕获的lambda。因此,替换这个: void Matrice::mapEmplace(double (*fc
error: cannot convert ‘<lambda(double)>’ to ‘double (*)(double)’
例如,当我没有通过声明alea是全局的来捕获它时,它就起作用了。但是当我在函数g++的作用域中声明alea
时,会显示此错误
你知道问题出在哪里吗?我如何通过让我的函数保持
alea
本地来解决问题?std::function
专门用于处理捕获的lambda。因此,替换这个:
void Matrice::mapEmplace(double (*fct)(double)) {
for(size_t i = 1; i <= nLig; ++i)
for(size_t j = 1; j <= nCol; ++j)
(*this)(i,j) = (*fct)((*this)(i,j));
}
void矩阵::映射模板(双(*fct)(双)){
对于(size_t i=1;i您只能转换。在您的情况下,lambda通过复制捕获alea
,因此无法转换为函数指针类型
您有两个选择:
或者使用一些
或者将函数作为模板,以便编译器可以推断lambda的类型。
template<typename T>
void Matrice::mapEmplace(T fct)
{
for (size_t i = 1; i <= nLig; ++i)
for (size_t j = 1; j <= nCol; ++j)
(*this)(i, j) = fct((*this)(i, j));
}
模板
无效矩阵::映射模板(T fct)
{
for(size_t i=1;istd::function
是一个相当重的选项。一般来说,它必须分配内存来保存函数对象。在这种情况下,捕获的对象是一个布尔对象,将适合小缓冲区优化。但是,在这种情况下,我可能会选择模板。@Paul Sanders它工作得非常好,谢谢。
void Matrice::mapEmplace(double (*fct)(double)) {
for(size_t i = 1; i <= nLig; ++i)
for(size_t j = 1; j <= nCol; ++j)
(*this)(i,j) = (*fct)((*this)(i,j));
}
void Matrice::mapEmplace(std::function<double(double)> fct) {
for(size_t i = 1; i <= nLig; ++i)
for(size_t j = 1; j <= nCol; ++j)
(*this)(i,j) = fct((*this)(i,j));
}
template<typename T>
void Matrice::mapEmplace(T fct)
{
for (size_t i = 1; i <= nLig; ++i)
for (size_t j = 1; j <= nCol; ++j)
(*this)(i, j) = fct((*this)(i, j));
}