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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> два вопроса по boost::bind() 
V
    Опции темы
mes
Дата 27.11.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  27.11.2010,  19:38 Найти цитируемый пост)
а смысл? тут и так все понятно. или я чего-то не понял? 

разницу между "проксированием"и "биндингом"...


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 27.11.2010, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



вот весь вопрос:
Код

#include <boost/signals2.hpp>
#include <boost/bind.hpp>
#include <boost/function_types/parameter_types.hpp>
#include <boost/type_traits.hpp>
#include <typeinfo>
#include <iostream>

typedef boost::signals2::signal<void(int)> sig_t;

struct type {
   void method(int v) {
      std::cout << v << std::endl;
   }
};

template<typename T, typename S>
void connect(T* object, S& sig) {
   typedef typename S::result_type(T::*mp)(typename S::argument_type);
   boost::bind(&T::mp, object, _1)(3); // ошибка :(
}

int main() {
   type t;
   sig_t sig;
   connect(&t, sig);
   sig(3);
}

http://liveworkspace.org/code/b294e00f542d...83e94c6403a17bc

Добавлено через 1 минуту и 45 секунд
Цитата(mes @  27.11.2010,  20:58 Найти цитируемый пост)
разницу между "проксированием"и "биндингом"... 

тут Вы правы smile 

но разве то, чего я хочу добиться, все же невозможно? просто любопытно smile
PM WWW   Вверх
mes
Дата 27.11.2010, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  27.11.2010,  20:00 Найти цитируемый пост)
вот весь вопрос:

а имя метода где ? где то вы явно должны указать его... либо напрямую, либо через прокси-оболочку..



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 27.11.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  27.11.2010,  21:03 Найти цитируемый пост)
где то вы явно должны указать его... либо напрямую, либо через прокси-оболочку..

да-да-да!
это последнее чего не понимаю...
уже и сигнатуру вывел(косо правда) smile

Добавлено через 8 минут и 46 секунд
мысли вслух:
почему при указании типа в static_cast<void(T::*)(int)> можно не указывать имя. а получить адрес имея сигнатуру нельзя?! что-то не так...
PM WWW   Вверх
mes
Дата 27.11.2010, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  27.11.2010,  20:16 Найти цитируемый пост)
 а получить адрес имея сигнатуру нельзя?! что-то не так... 

потому что множество имен могут быть определены с одной сигнатурой..
а что выбирать из множества компилятор не знает, даже если множество представлено всего одним методом.. 

это, на мой взгляд, еще один из недостатков С++, то что нельзя одно и то же имя применить (без ухищрений)  к разным типам .. 



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 27.11.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



в общем, я так понял, это невозможно..

PM WWW   Вверх
mes
Дата 27.11.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



кстати насчет сигнатур..вас никогда не смущала такое 
Код

struct A {
 static void sf() {}
};
int main ()
{
   A a; a.sf ();
   A::sf();
}

какая сигнатура у sf ? что ее можно вызвать двумя различными способами.. 
 smile

Добавлено @ 21:54
Цитата(boostcoder @  27.11.2010,  20:48 Найти цитируемый пост)
в общем, я так понял, это невозможно..

это все равно что по определению (прилагательному) найти субъект  нему относящийся..
вот имеем красный.. а что красный: мяч, фрукт, знак ... ?

хоть  грубоватое сравнение, но надеюсь поможет.. 


Это сообщение отредактировал(а) mes - 27.11.2010, 22:16


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 27.11.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  27.11.2010,  21:51 Найти цитируемый пост)
какая сигнатура у sf ?

и правда, какая?
ее то и методом назвать сложно. но вызывается как метод тоже...

Цитата(mes @  27.11.2010,  21:51 Найти цитируемый пост)
это все равно что по определению (прилагательному) найти субъект  нему относящийся..
вот имеем красный.. а что красный мяч, фрукт, знак ... ?

ну да.

Добавлено через 14 секунд
Цитата(mes @  27.11.2010,  21:51 Найти цитируемый пост)
надеюсь поможет..  

помогло.

Добавлено через 6 минут и 19 секунд
хотя..с другой стороны...я тут подумал...допустим, к примеру, то, чего я хочу - возможно.
теперь, представим ситуацию, когда есть два метода с одинаковой сигнатурой и разными именами. что тогда? какой метод выбрать компилятору? как решить?
ответ - никак smile
посему такое невозможно. если бы изначально меня посетила эта(очевидная) мысль, не было бы потрачено столько времени своего и участников.

всем спасибо.

PM WWW   Вверх
mes
Дата 27.11.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  27.11.2010,  21:16 Найти цитируемый пост)

и правда, какая?
ее то и методом назвать сложно. но вызывается как метод тоже..

ну прежде всего  понятия "метод" нет в С++ и оно введено из другой области.. 
в С++ есть статические и нестатические функции-члены. 

во вторых на этот момент  вызова "еще не важна" сигнатура.. а действует правило, о возможности обращения к членам.. 
smile

вот в частности поэтому "адрес + сигнатура" не одно  и то же (по функциональности) , что и "имя функции"..


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 27.11.2010, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  27.11.2010,  22:37 Найти цитируемый пост)
ну прежде всего  понятия "метод" нет в С++ и оно введено из другой области.. 

корни появления этого термина в с++(а сначала в Си в поделках Страуструпа) я помню, из курса общей истории smile 

Цитата(mes @  27.11.2010,  22:37 Найти цитируемый пост)
от в частности поэтому "адрес + сигнатура" не одно  и то же (по функциональности) , что и "имя функции".. 

все верно.


Это сообщение отредактировал(а) boostcoder - 27.11.2010, 22:40
PM WWW   Вверх
mes
Дата 27.11.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  27.11.2010,  21:39 Найти цитируемый пост)
корни появления этого термина в с++(а сначала в Си в поделках Страуструпа)

 неа это чужие корни, от которых Страуструп убежал smile



--------------------
PM MAIL WWW   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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