将 lambda 转换为 std::函数时出现问题
Trouble casting lambda to std::function
我在尝试创建API时遇到MiniGW问题。这在MSVC11(Visual Studio 2012 C++编译器(中工作正常。我的编译器(我相信(QMAKE_CXXFLAGS += -std=c++0x
设置正确,毕竟我确实有 lambda 错误消息。
有关更多说明:
typedef std::function<bool(Item)> WHERE;//I was attempting to provide an explicit cast, 'auto' works fine in MSVS
Group where(WHERE func);//A simple "foreach boolean" search
使用上述>
Groups::WHERE where = [](Item & x)-> bool{return x.has("NEW");};
结果在:
tst_groupstest.cpp:257:错误:请求从"GroupsTest::groups((::__lambda1"转换为非标量类型"Groups::WHERE {aka std::function}" Groups::WHERE = [](Item & x(-> bool{return x.has("NEW"(;};
我希望这是显而易见的,我只是找不到它。我计划通过这个项目来支持Linux和Mac,所以我希望早日解决这个问题。
这是我目前的解决方法,如果可能的话,我宁愿远离它(毕竟,我在设计 API 时考虑到 lambda 的原因是拥有简洁的代码块,这是显而易见的(。
本节编译(它不使用 lambda(
struct lambdaCueListstdFunc{
bool operator()(Groups::Item x)
{
return x.has("NEW");
}
};
/**
* Selects all cues for a particular list
* @brief getCueList
* @param list
* @return a vector of all the cues for this list sorted by number.
*/
std::vector<Groups::Item> CueService::getCueList(std::string list)
{
std::function<bool(Groups::Item)> where = lambdaCueListstdFunc();
// auto where = [&list] (Groups::Item & x) ->
// {
// return x.get(la::cues::List) == list;
// };
std::vector<Groups::Item> result = cues()->where(where).sort(la::cues::NUMBER);
return result;
}
您提供给std::function
的函数签名与您尝试分配给它的 lambda 的函数签名不同。
typedef std::function<bool(Item)> WHERE; // <-- Takes argument by value
Groups::WHERE where = [](Item & x)-> bool{return x.has("NEW");};
// ^^^
// The lambda takes argument by reference
更改其中一个以匹配另一个,具体取决于是要按值传递还是按引用传递。
出于不同的原因:通过 lambda args 传递的按值类型具有 std::unique_ptr 类型的成员,因此不可复制。
修复 1:将成员更改为 std::shared_ptr
修复 2:传递(常量(引用
- Visual Studio中的函数声明和函数定义问题
- C++quit()函数中可能存在作用域问题
- 类似于strcat()的函数出现问题
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 类C++中的函数问题(LNK2019和LNK1120错误)
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 关于简单C++函数(is_palindrome)的逻辑的问题
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- constexpr构造函数需要常量成员函数时出现问题
- 添加存储在向量中的大整数的函数出现问题
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 关于 c++ 函数中指针赋值的简单问题
- 如何在标头中声明(或定义)函数的问题
- 有关 c++ 构造函数的问题
- 模板类转换问题 - 无法推断调用的函数
- 从 C++ 中的函数返回数组地址问题
- 关于复制构造函数的一个棘手问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题