Вынести функцию в отдельный поток

119
27 ноября 2020, 12:00

есть программа, как в аргументы функции передать целый класс, и его изменять так, что-бы именения были видны в main()?

#include <iostream>
#include <thread>
class foo{
public:
  int bar2;
  void bar(){
    bar2 *= 2;
  }
};
void func(foo &f){
  f.bar();
}
int main(){
  foo f;
  f.bar2 = 1234;
  std::thread t(func (f));
  t.join();
  return 0;
}

Зачем тут потоки: приводить весь свой проект я конечто же не буду, в нем нужно отдельно от цикла while(true) выполнять какие-либо действия.

Answer 1

Для этого достаточно передать ссылку на этот класс вместо самого класса:

::std::thread t{&func, ::std::ref(f)};

Так как все параметры, переданные в конструктор потока, копируютя, то передавать необходимо обертку для ссылки вместо просто ссылки на объект.

READ ALSO
В чём разница между decltype(auto) и auto&amp;&amp;?

В чём разница между decltype(auto) и auto&&?

В чём разница между decltype(auto) и auto&&?

99
константное значение n, m

константное значение n, m

Пытаюсь получить транспонированную матрицу, но выдает ошибку Выражение должно иметь константное значение n, m; Не могу понять что не так, пример...

143
Python extension modules без линковки к pythonXX.dll

Python extension modules без линковки к pythonXX.dll

Возможно ли использовать импортируемые dll (имеющие расширениеpyd) в питоне на Windows без линковки к pythonXX

94
Задание имени библиотеки, используя generator expressions

Задание имени библиотеки, используя generator expressions

Пытаюсь задать название библиотеки, используя generator expressions, однако получаю ошибку сборки:

148