template +boost::function + boost::bind + ООП
От: maxis11 Украина  
Дата: 24.08.12 20:04
Оценка:
Есть некоторый код:

template <class SomeData>
void clients_connect (SOCKET sock, sockaddr_in client_addr, SomeData dati)
{
   ... // ... - какой-то ненужный код
}

template <class SomeData>
void SomeClass::some_method (boost::function<bool (SOCKET,sockaddr_in,MData)> f,int qri, SomeData dati)
{
   ...
   main_thread=boost::thread ( boost::bind( &SomeClass::other_method, this, f, dati ) );
   ...
}

template <class SomeData>
void SomeClass::other_method (boost::function<bool (SOCKET,sockaddr_in,MData)> f, SomeData dati)
{
   ...
   f(param1,param2,dati);
   ...
}

int main()
{
   ....
   SomeClass cl;
   Data dt; //структура где хранится информация
   cl.some_method(clients_connect,100,dt); //тут ошибка
   ...
}


error: no matching function for call to 'SomeClass::some_method (<unresolved overloaded function type>, int, Data&)'
Почему то компилятор видит эту функцию как <unresolved overloaded function type>, наверно из-за template. Как можно сказать компилятору, что это SomeClass::some_method (boost::function<bool(unsigned int, sockaddr_in, SomeData)>, int, SomeData) [with SomeData = Data]|. Метод с заменой template на void* не предлагать.
шаблоны template c++ boost::function boost::bind ооп адская смесь
Re: template +boost::function + boost::bind + ООП
От: MT-Wizard Украина  
Дата: 24.08.12 20:21
Оценка:
Здравствуйте, maxis11, Вы писали:

M>Есть некоторый код:

M>...
M>error: no matching function for call to 'SomeClass::some_method (<unresolved overloaded function type>, int, Data&)'
M>Почему то компилятор видит эту функцию как <unresolved overloaded function type>, наверно из-за template. Как можно сказать компилятору, что это SomeClass::some_method (boost::function<bool(unsigned int, sockaddr_in, SomeData)>, int, SomeData) [with SomeData = Data]|. Метод с заменой template на void* не предлагать.

cl.some_method(clients_connect<Data>,100,dt);

?
А ти, москалику, вже приїхав (с)
Re[2]: template +boost::function + boost::bind + ООП
От: maxis11 Украина  
Дата: 24.08.12 21:08
Оценка:
Здравствуйте, MT-Wizard, Вы писали:

MW>Здравствуйте, maxis11, Вы писали:


M>>Есть некоторый код:

M>>...
M>>error: no matching function for call to 'SomeClass::some_method (<unresolved overloaded function type>, int, Data&)'
M>>Почему то компилятор видит эту функцию как <unresolved overloaded function type>, наверно из-за template. Как можно сказать компилятору, что это SomeClass::some_method (boost::function<bool(unsigned int, sockaddr_in, SomeData)>, int, SomeData) [with SomeData = Data]|. Метод с заменой template на void* не предлагать.

MW>
MW>cl.some_method(clients_connect<Data>,100,dt);
MW>

MW>?

Ту же ошибку выдаёт
Re[3]: template +boost::function + boost::bind + ООП
От: MT-Wizard Украина  
Дата: 24.08.12 21:58
Оценка: 3 (2)
Здравствуйте, maxis11, Вы писали:

M>Ту же ошибку выдаёт


У Вас boost::function<bool..., а clients_connect — void
Я думаю поэтому boost::function не хочет нормально конструироваться
Можно попробовать явно создать boost::function<...>(clients_connect<Data>) в параметре.
А ти, москалику, вже приїхав (с)
Re[4]: template +boost::function + boost::bind + ООП
От: maxis11 Украина  
Дата: 25.08.12 07:57
Оценка:
Здравствуйте, MT-Wizard, Вы писали:

MW>Здравствуйте, maxis11, Вы писали:


M>>Ту же ошибку выдаёт


MW>У Вас boost::function<bool..., а clients_connect — void

MW>Я думаю поэтому boost::function не хочет нормально конструироваться
MW>Можно попробовать явно создать boost::function<...>(clients_connect<Data>) в параметре.

Спасибо большое, только вот аналогичная проблема теперь


main_thread=boost::thread ( boost::bind( &SomeClass::other_method, this, f, dati ) );


Где теперь other_method не может распознать, причём если задать:


boost::function<bool (boost::function<bool (SOCKET,sockaddr_in,MData)> f, MData dati)> f2(MTCP_server::tech_listen<MData>);


Проблема будет MTCP_server::tech_listen (всегда ваш К.О.).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.