У меня есть функция-член, которую я не могу с легкостью выполнить модульным тестом (она слушает сокеты и т. Д. c):
void MyClass::func()
{
listen();
send();
}
Поэтому я хочу применить ее к шаблону, а затем я могу передать фиктивный объект в свой test:
template<class OBJECT>
void func(OBJECT& obj)
{
obj.listen();
obj.send();
}
, а затем я бы сделал:
func(*this);
Выше компилируется, когда я делаю нормальный вызов функции. Однако, когда я создаю поток и вызываю его:
std::thread t1(&MyClass::func, this, *this);
, я получаю ошибки компилятора (см. Ниже), относящиеся к decltype. Есть ли способ, которым я все еще могу достичь этого?
/opt/gcc-8.2.0/lib/gcc/x86_64-unknown-linux/8.2.0/../../../../include/c++/8.2.0/thread:127:8: note: in instantiation of template class 'std::thread::_Invoker<std::tuple<void (MyClass::*)(MyClass &),
MyClass *, MyClass> >' requested here
__make_invoker(std::forward<_Callable>(__f),
Тем не менее, следующие работы:
void MyClass::x()
{
func(*this);
}
std::thread t1(&MyClass::x, this);