Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
1

bind

20.09.2012, 19:49. Показов 2976. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
хочу нечто такое.

C++
1
application_->onAppCmd = boost::bind(&GameCore::engine_handle_cmd, ...);
C++
1
2
3
4
class GameCore {
public:
void engine_handle_cmd(struct android_app* app, int32_t cmd);
}
реально ли ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2012, 19:49
Ответы с готовыми решениями:

asio+bind
при выполнении в bind.hpp и handler_type_requirements.hpp возникают ошибки вот код Server.h...

boost::bind
CTCPClient::CTCPClient(std::string _host, int port) :socket_(io_service_) { ...

Применение вложенных boost::bind
Есть такая задача, носящая, скорее, педагогический, нежели практический характер. В общем, в...

Присвоить значение возвращаемое boost::bind
Добой ночи. Хотелось бы знать, как присвоить значение, возвращаемое boost::bind. Есть...

20
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.09.2012, 20:08 2
реально

Добавлено через 38 секунд
а для чего гадаешь? возьми и проверь.
ну, или, если влом - доку прочти.
0
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
20.09.2012, 20:10  [ТС] 3
да че-то не получается. щас еще попробую : )
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.09.2012, 20:14 4
C++
1
2
GameCore gc;
application_->onAppCmd = boost::bind(&GameCore::engine_handle_cmd, gc, ...);
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.09.2012, 20:19 5
Цитата Сообщение от ForEveR Посмотреть сообщение
application_->onAppCmd = boost::bind(&GameCore::engine_handle_cmd, gc, ...);
ну, тогда уж: application_->onAppCmd = boost::bind(&GameCore::engine_handle_cmd, &gc, ...);
0
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
20.09.2012, 20:20  [ТС] 6
Цитата Сообщение от ForEveR Посмотреть сообщение
C++
1
2
GameCore gc;
application_->onAppCmd = boost::bind(&GameCore::engine_handle_cmd, gc, ...);

&gc так наверное ?

что вместо ... ? _1 ? не катит чет.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.09.2012, 20:27 7
application_->onAppCmd = boost::bind(&GameCore::engine_handle_cmd, &gc, _1, _2);

Добавлено через 1 минуту
а кто такой onAppCmd ?
0
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
20.09.2012, 20:29  [ТС] 8
такой вариант тоже не катит. _1 _2 _3 тоже пробывал : )

указатель на колбэк.

C++
1
void engine_handle_cmd(struct android_app* app, int32_t cmd);
я его хочу обьявить в классе.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.09.2012, 20:31 9
покажи декларацию onAppCmd.
0
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
20.09.2012, 20:32  [ТС] 10
C++
1
2
3
4
5
6
7
8
struct android_app {
    ...    
 
    // Fill this in with the function to process main app commands (APP_CMD_*)
    void (*onAppCmd)(struct android_app* app, int32_t cmd);
 
    ...
}
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.09.2012, 20:33 11
разве я просил показать декларацию метода engine_handle_cmd() ?
0
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
20.09.2012, 20:58  [ТС] 12
в эклипсе хоткеи работают только если английская раскладка включена. : )

поправил сразу.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.09.2012, 21:00 13
какие хоткие? зачем хоткеи? зачем ты мне об этом говоришь? ты под веществами?
где декларация onAppCmd?
1
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
20.09.2012, 21:07  [ТС] 14
быть может ты под веществами ? перейди на первую страницу и прочитай посл. сообщение.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.09.2012, 21:17 15
ы!
сорри, но его там небыло. первая страница заканчивалась моим сообщением и я перешел на вторую.

boost::bind() возвращает функциональный объект ,который невозможно привести к типу указателю на функцию/метод. используй boost::function.

к тому же, не вижу никакой необходимости в boost::bind() вообще.
вот твое решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct type {
   type()
      :mptr(0)
   {}
   
   void m(int, const char*) {}
   
   void(type::*mptr)(int, const char*);
};
 
int main() {
   type t;
   std::cout << t.mptr << std::endl;
   t.mptr = &type::m;
   std::cout << t.mptr << std::endl;
}
http://liveworkspace.org/code/... b893feb7f9
0
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
20.09.2012, 22:03  [ТС] 16
boost::function погляжу, спасибо.

Предложенное тобой решение не подходит т.к. onAppCmd обьявлен в хедере андройда. Ну или я тебя не понял...

Добавлено через 36 минут
C++
1
2
3
4
boost::function2<void, struct android_app*, int32_t> f = boost::function2<void, struct android_app*, int32_t>(
            boost::bind(&GameCore::engine_handle_cmd, this, _1, _2));
 
    application_->onAppCmd = &f;
error: cannot convert 'boost::function2<void, android_app*, int>*' to 'void (*)(android_app*, int32_t) {aka void (*)(android_app*, int)}' in assignment
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.09.2012, 22:05 17
Цитата Сообщение от Saiberg Посмотреть сообщение
boost::function2<void, struct android_app*, int32_t> f = boost::function2<void, struct android_app*, int32_t>(
* * * * * * boost::bind(&GameCore::engine_handle_cmd, this, _1, _2));
application_->onAppCmd = &f;
ты доку принципиально не читаешь?
0
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
20.09.2012, 22:06  [ТС] 18
читал... может не там.. ?

f(0, 1);

так вызывается.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.09.2012, 22:10 19
niXman, Ну только если чтобы не делать копию. Если копия - ок, можно и не указатель.
http://liveworkspace.org/code/... 1bd339394b

Saiberg, Нельзя result от bind-а напрямую присвоить указателю на функцию. boost::function напрямую указателю на функцию тоже нельзя.
Вот тут к примеру было большое обсуждение.http://stackoverflow.com/quest... ion-that-r
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
22.09.2012, 00:38 20
в одном проекте юзал специальный враппер, который как раз умел принимать функциональные объекты и умел возвращать специальный указатель на свободную функцию, которая каким-то макаром перевызывала переданный объект. там была какая-то платформозависимая магия с соглашениями о вызовах, с выполняемой памятью и прочий мрак. сильно не разбирался.
вот еще что-то похожее быстрим поиском нашлось под винду.
http://www.codeproject.com/Art... to-Non-sta
быть может есть какой-нибудь кроссплатформенный кошерный вариант.
0
22.09.2012, 00:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2012, 00:38
Помогаю со студенческими работами здесь

boost::bind прекращение работы программы microsoft optimizing compile
Всем привет! При компилирование выскакивает окошко с надписью &quot;прекращение работы программы...

Boost::asio::ip::udp::socket bind а мне нужен не локальный хост
Здравствуйте. Пытаюсь наладить для своих нужд пример #include &lt;iostream&gt; #include &lt;string&gt;...

Освобождение памяти после std:bind
Что имею: - CentOS - gcc 4.8 - valgrind Что делаю - С помощью valgrind устраняю утечки ...

Вывод типа, универсальные ссылки, cannot bind lvalue to && и другие
Доброго дня, товарищи. Вот код: Вот отчет компиля: Объясните мне, пожалуйста, где я не прав....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru