Возникла проблемка.
Подскажите, как запустить в потоке (std::thread) из одного класса метод другого класса?
Например, есть два класса:
Код: Выделить всё
class TestOutput
{
public:
const char* get() const { return "It's working!\n"; }
};
class CppThread
{
public:
void start(/* нужно принимать указатель на функцию (метод) и аргументы */)
{
// тут нужно запустить поток std::thread(метод, аргументы);
}
};Суть в том, чтобы обращаться к std::thread не на прямую (std::thread(класс::метод, аргументы)), а через "обёртку", в данном примере класс CppThread. Например, так:
Код: Выделить всё
TestOutput to;
CppThread cp;
cp.start(&to::get, this);И класс CppThread, используя std::thread должен запустить метод get() в новом потоке.
Пробовал описать метод start(), как шаблонный:
Код: Выделить всё
template< class Function, class... Args >
void start(Function&& f, Args&&... args)
{
std::thread(f, args);
}Компилятор ругается:
error: parameter packs not expanded with '...'
note: 'args'
Версия GCC 4.7.2.
Если кто знает, как решить эту проблемку, подскажите, пожалуйста.
Благодарю.