Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> хитрый bind, для _1, _2 
V
    Опции темы
cupper
Дата 7.12.2011, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Код


class A
{
public:
    typedef void(*Handle)(const int, const int);
    Handle func;
};

class B
{
public:
   static void methodForA(const int a1, const int a2)
   {
      std::cout << a1 << a2 << std::endl;
   }
};

int main()
{
   A a;
   a.func= &B::methodForA;
   
   a.func(1, 2);
}

http://liveworkspace.org/code/ea2295e6fc95...5ae51bedb5d8851

есть некий класс А, он такой, менять его не могу. Я пишу класс B. В приведенном выше коде все работает.
Могу ли избавиться от static в определении метода класса B ?

пробую делать так
Код

A a;
   B b;
   a.func = boost::bind(&B::methodForA, boost::ref(b), _1, _2);


можно ли вообще такое проделать, любыми другими средствами ? без непосредственно модификации класс A.
PM MAIL   Вверх
boostcoder
Дата 7.12.2011, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Код

#include <iostream>

class A
{
public:
    typedef void(*Handle)(const int, const int);
    Handle func;
};

class B
{
public:
   void methodForA(const int a1, const int a2)
   {
      std::cout << a1 << a2 << std::endl;
   }
};

int main()
{
   A a;
   a.func=[](const int a_arg, const int b_arg) {B b;return b.methodForA(a_arg, b_arg);};
   
   a.func(1, 2);
}

http://liveworkspace.org/code/bc50592c7ecd...774c7f09f6fe125

Это сообщение отредактировал(а) boostcoder - 7.12.2011, 20:08
PM WWW   Вверх
Леопольд
Дата 8.12.2011, 04:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(cupper @  7.12.2011,  19:31 Найти цитируемый пост)
можно ли вообще такое проделать, любыми другими средствами ? без Непосредственно модификации класс A. 
нет, там же просто голый указатель на функцию. Единственное что можно, оборачиваешь в функцию, и присваиваешь её адрес указателю (как в примере boostcoder'а).


Это сообщение отредактировал(а) Леопольд - 8.12.2011, 04:19


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.