Здраствуйте все!
boost я знаю поверхностно, поиск ответа на мой вопрос не дал, а похожие вопросы/ответы отличаются как раз на ту малость которую я сам преодолеть не могу — поэтому прошу помощи.
Задача:
Есть typedef указателя на функцию и я никак не могу составить правильный boost::bind (или boost::lambda или boost::mem_fun) что-бы вызывалась ф-ия член класса.
Вот минимальный кусочек кода (неправильная, но такая нужная строчка выделена):
// ->
// Это не мой код и изменить я его не могу, поэтому не предлагать
// boost::thread или вместо typdef boost::function
typedef unsigned int (_cdecl* proc_t) (void*);
void ThreadStartHelper(proc_t pFn, void* pparam)
{
// May be in new thread:
pFn(pparam);
}
// <-
// А вот дальше мой код
class CTest
{
public:
void Start()
{
// The standart way is:
// ThreadStartHelper(ThreadFuncStatic, this);
// Но очень хочется избавится от промежуточной статической функции
// Wanted:
ThreadStartHelper( boost::bind(&CTest::ThreadFunc, _1), this );
}
unsigned int ThreadFunc()
{
return 0;
}
static unsigned int ThreadFuncStatic(void* pparam)
{
if(pparam)
{
CTest* p = static_cast<CTest*>(pparam);
p->ThreadFunc();
}
return 0;
}
};