Просто чтобы перейти к сути, я хочу вернуть true
или false
, используя лямбда-выражение внутри оператора if()
. Я видел этот вопрос, который похож на мой: ССЫЛКА , но я не смог найти ответ.
Так вот мой пример кода:
if([&rel_pose](Eigen::VectorXd pose)
{
return (sqrt(pose(0) * pose(0) + pose(1) * pose(1)) < 2) ? true : false;
}) // do smth
Когда я пытаюсь скомпилировать, я получаю эту ошибку:
error: could not convert ‘<lambda closure object>graphslam::GraphSLAM::main_pose_callback(const ConstPtr&)::<lambda(Eigen::VectorXd)>{rel_pose}’ from ‘graphslam::GraphSLAM::main_pose_callback(const ConstPtr&)::<lambda(Eigen::VectorXd)>’ to ‘bool’
})
Хорошо, читая ошибку, я подумал, что не вызывал функцию, поскольку компилятор не рассматривает выражение как bool. Поэтому я попытался использовать этот код:
if(([&rel_pose](Eigen::VectorXd pose)
{
return (sqrt(pose(0) * pose(0) + pose(1) * pose(1)) < 2) ? true : false;
};)) // do smth
И ошибка:
expected ‘)’ before ‘;’ token
};)) return;
Это может показаться очевидной ошибкой, но для меня я, вероятно, неправильно понимаю синтаксис и подумал спросить, что происходит.
EDIT:
Обратите внимание, что я упростил код, чтобы вы могли легко воспроизвести ошибку. Я знаю, что лямбда-выражения в данном конкретном случае не имеют никакого смысла.