thread конструктор. Передача параметров функции
Имеется класс CMMap, у него имеется метод view. Пытаюсь "делегировать" выполнение этого метода в тред. Вываливается ошибка:
Ошибка C2661 нет перегруженной функции, принимающей 2 аргументов
Код:
class CMMap : private "какой шаблонный класс с определёнными аргументами"
{
public:
void view() {};
};
}
int main()
{
CMMap mm;
std::thread th(std::mem_fn(&CMMap::view), mm);
th.detach();
th.~thread();
return 0;
}
Может вопрос и глупый, но битый день не могу выяснить причину. Притом компилится в таком виде:
class A
{
public:
template <TN T>
auto f(T a) {
return a;
}
};
void main()
{
std::thread th(std::mem_fn(&A::f<int>), A(), 4);
th.detach();
}
Ответы (1 шт):
Автор решения: Andrej Levkovitch
→ Ссылка
Вангую: базовый класс CMMap запрещает копирование. Если я прав, то сделайте так (тем более наверняка вы имели ввиду именно это когда писали код):
std::thread th(std::mem_fn(&CMMap::view), std::ref(mm));
Нужно явно указать, что вы передаете аргумент по ссылке, а не по значению