#c
#c
Вопрос:
У меня есть рабочий класс c , который имеет файл заголовка и файл cpp, где следующие строки находятся в одной из функций этого класса в файле cpp:
the robot(robot_ip);
services
.advertiseService<franka_control::SetJointImpedance>(node_handle, "set_joint_impedance",
[amp;robot](autoamp;amp; req, autoamp;amp; res) { return franka_control::setJointImpedance(robot, req, res); });
Теперь я переместил первую строку выше, franka::Robot robot{robot_ip};
, в файл заголовка этого класса вместо этого, потому что я хочу иметь возможность ссылаться robot
также на другие функции этого класса. Однако теперь я получаю ошибку:
error: capture of non-variable ‘CLass::robot’
[amp;robot](autoamp;amp; req) { return sometype(robot, req, res); });
^~~~~
Ответ №1:
Вы можете захватывать только локальные переменные в лямбда-функцию, потому что в противном случае эти переменные не будут доступны для этой функции — вы можете рассматривать эту функцию как автономную функцию с дополнительными данными.
Но после того, как ваше изменение robot
стало глобальной переменной, оно доступно внутри лямбда-функции точно так же, как доступно для любой другой функции — вам не нужно захватывать его, чтобы использовать (и дело не только в том, что вам не нужно — вам не разрешено).
Комментарии:
1. Это означает, что я должен написать [](auto amp;amp; req, auto amp;amp; res) … или [это](autoamp;amp; req, autoamp;amp; res) { возвращает franka_control::setJointImpedance(robot, req, res); }); ?
2. Я заметил новую проблему, для решения которой мне на самом деле приходится использовать std::unique_ptr<franka::Robot> robot; в заголовке и robot = std ::make_unique<franka::Robot>(robot_ip); в cpp, но понятия не имею, как мне следует изменить две другие строки ниже services…
3. Я не понимаю новый вопрос… Если в заголовке есть
std::unique_ptr<franka::Robot> robot
, то вы можете просто использовать его в lambda, вам не нужно его захватывать.