Есть некоторый код:
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* не предлагать.
Здравствуйте, 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);
?
Здравствуйте, 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>?
Ту же ошибку выдаёт
Здравствуйте, maxis11, Вы писали:
M>Ту же ошибку выдаёт
У Вас boost::function<bool..., а clients_connect — void
Я думаю поэтому boost::function не хочет нормально конструироваться
Можно попробовать явно создать boost::function<...>(clients_connect<Data>) в параметре.
Здравствуйте, 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 (всегда ваш К.О.).