170 похожих чатов

Зачем может понадобиться передавать в boost::bind на метод - "this"

как параметр?

15 ответов

7 просмотров

Чтобы вызвать метод - член класса

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
Чтобы вызвать метод - член класса

а без передачи this, не получиться вызвать?

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
Если тебе нужен bind , то нет

А зачем может bind понадобиться если кроме this других параметров нет, только плейсхолдер дальше один ?

Aleksei Budyakov
А зачем может bind понадобиться если кроме this др...

Не знаю. Во-первых, bind устарел, он с с++11 не нужен уже, есть лямбды. Во-вторых, ты покажи код, либо посмотри сам примеры на использование bind на CPR.

Aleksei Budyakov
А зачем может bind понадобиться если кроме this др...

В целом - для вызова функции в контексте, где именно этот параметр ей не передадут

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
Не знаю. Во-первых, bind устарел, он с с++11 не н...

#include <ros/ros.h> #include <actionlib/server/simple_action_server.h> #include <actionlib_tutorials/FibonacciAction.h> class FibonacciAction { protected: ros::NodeHandle nh_; actionlib::SimpleActionServer<actionlib_tutorials::FibonacciAction> as_; // NodeHandle instance must be created before this line. Otherwise strange error occurs. std::string action_name_; // create messages that are used to published feedback/result actionlib_tutorials::FibonacciFeedback feedback_; actionlib_tutorials::FibonacciResult result_; public: FibonacciAction(std::string name) : as_(nh_, name, boost::bind(&FibonacciAction::executeCB, this, _1), false), action_name_(name) { as_.start(); } ~FibonacciAction(void) { } void executeCB(const actionlib_tutorials::FibonacciGoalConstPtr &goal) { // helper variables ros::Rate r(1); bool success = true; // push_back the seeds for the fibonacci sequence feedback_.sequence.clear(); feedback_.sequence.push_back(0); feedback_.sequence.push_back(1); // publish info to the console for the user ROS_INFO("%s: Executing, creating fibonacci sequence of order %i with seeds %i, %i", action_name_.c_str(), goal->order, feedback_.sequence[0], feedback_.sequence[1]); // start executing the action for(int i=1; i<=goal->order; i++) { // check that preempt has not been requested by the client if (as_.isPreemptRequested() || !ros::ok()) { ROS_INFO("%s: Preempted", action_name_.c_str()); // set the action state to preempted as_.setPreempted(); success = false; break; } feedback_.sequence.push_back(feedback_.sequence[i] + feedback_.sequence[i-1]); // publish the feedback as_.publishFeedback(feedback_); // this sleep is not necessary, the sequence is computed at 1 Hz for demonstration purposes r.sleep(); } if(success) { result_.sequence = feedback_.sequence; ROS_INFO("%s: Succeeded", action_name_.c_str()); // set the action state to succeeded as_.setSucceeded(result_); } } }; int main(int argc, char** argv) { ros::init(argc, argv, "fibonacci"); FibonacciAction fibonacci("fibonacci"); ros::spin(); return 0; }

Ilya Zviagin
Не знаю. Во-первых, bind устарел, он с с++11 не н...

Как устарел - не вижу разницы захватывающую лямбду использовать или bind, если например передавать куда-то в std::function том же. Но я стал использовать лямбды конечно для удобства чтения

Aleksei-Budyakov Автор вопроса
Aleksei Budyakov
#include <ros/ros.h> #include <actionlib/server/si...

Я так понимаю тут он используется потому что при вызвое bind в constructor initilizer list, не передасться дефолтно this?

Alexander N
Как устарел - не вижу разницы захватывающую лямбду...

Я бы, по возможности использовал (std::)bind_front, он меньше перегружен ненужным функционалом по сравнению с std::bind и меньше загромождает код лишними скобочками по сравнению с лямбдами, имхо

Ofee Oficsu
Я бы, по возможности использовал (std::)bind_front...

Хм надо посмотреть что за хреновина такая. Он возвращает тоже служебный тип _Bind типа? На gcc конкретно

Alexander N
Хм надо посмотреть что за хреновина такая. Он возв...

Судя по cppref, там unspecified, так что да, возвращать может что угодно. Делает то же самое, что и bind, только по порядку, без placeholders. По сути, это просто способ обеспечения частичного применения

Ofee Oficsu
Судя по cppref, там unspecified, так что да, возвр...

ну бинд фронт еще в компилтайме неплохо раскручивается и выходит эффективнее

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта