struct Test
{
typedef unsigned (Test::*MethodPtr)();
unsigned testMethod() {}
};
typedef void (*ThreadPtr)(void *);
ThreadPtr threadPtr = reinterpret_cast<ThreadPtr>(&Test::testMethod);
Я хочу запустить поток в метод класса определенного объекта. Я использую указатель метода в качестве точки входа потока и передаю указатель объекта в качестве единственного параметра. Это работает, так как в моей структуре нет виртуальных объявлений.
Мой вопрос касается операции reinterpret_cast. g ++ допускает это, Visual Studio 2008 - нет. Я обошел ограничения VS2008, записав значение указателя метода непосредственно в переменную threadPtr. Результирующий код работал нормально, но это ужасный обходной путь для простой операции. Кто-нибудь может предложить более элегантные альтернативы?
Спасибо
-G
Редактировать:
Просто чтобы прояснить, предупреждение, данное gcc, выглядит следующим образом:
methodPtrTest.cpp:14: warning: converting from ‘void (Test::*)()’ to ‘void (*)(void*)’