boost::bind и typedef указатель на функцию
От: Jack Osicilator  
Дата: 22.10.04 19:31
Оценка:
Здраствуйте все!

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;
    }
};
Люблю OSCилировать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.