Я пытаюсь создать вектор с классом в качестве шаблона, который имеет член std::thread. Однако я не уверен, как правильно создать список инициализации с помощью потока. В настоящее время у меня есть это:
class someclass
{
public:
std::thread thread;
int id;
someclass(std::thread init_thread, int init_id) :
thread(&init_thread),
id(init_id)
{}
};
Однако, когда я пытаюсь скомпилировать его в VS2012, я получаю следующую ошибку:
f:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(1152): ошибка C2064: термин не оценивается как функция, принимающая 0 аргументов, которые указывают на строку: _VARIADIC_EXPAND_0X(_CLASS_BIND, , , , )
Если я удаляю & из инициализации потока (& init_thread), вместо этого я получаю следующие ошибки: 1>f:\users...\project\source.cpp(43): ошибка C2248: 'std::thread::thread': невозможно получить доступ к частному члену, объявленному в классе 'std::thread' 1> f:\program files (x86)\microsoft visual studio 11.0\vc\include\thread(73): см. объявление 'std::thread::thread' 1> f:\program files (x86)\microsoft visual studio 11.0\vc\include\thread(32): см. объявление 'std::thread'
Итак, мой вопрос: как правильно создать такой список инициализации?
Позже в коде я также делаю следующее (просто для справки...)
void function()
{
// ....
std::vector<someclass> v_someclass;
v_someclass.push_back(someclass((std::thread(session, socket)),id));
// ....
}