我在尝试创建 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 where = [](Item & x)-> bool{return x.has("NEW");};
我希望这是显而易见的,我只是找不到。我计划在这个项目中支持 Linux 和 Mac,所以我希望尽快解决这个问题。
这是我目前的解决方法,如果可能的话,我宁愿远离这个(毕竟,我设计它的原因是考虑到 lambdas 的 API 是为了有明显的简洁代码块)。
本节编译(它不使用 lambdas)
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;
}