Я пытаюсь создать объект, которому может быть предоставлена функция и ее параметры для его конструктора. Затем этот класс вызовет данную функцию внутри лямбда, которая вместо этого передается потоку. Что-то вдоль линийФункция вызова внутри лямбда передается в поток
class worker {
public:
template <class Fn, class... Args>
explicit worker(Fn f, Args ... args) {
t = std::thread([&]() -> void {
f(args...);
});
}
private:
std::thread t;
};
int main() {
worker t([]() -> void {
for (size_t i = 0; i < 100; i++)
std::cout << i << std::endl;
});
return 0;
}
Но я получаю следующее сообщение об ошибке
error: parameter packs not expanded with '...': f(args...);
Что я здесь делаю неправильно? Любая помощь будет оценена по достоинству.
Какой компилятор? Не связанный с вашей ошибкой компилятора, но вы должны знать, что написанный код почти наверняка приведет к неопределенному поведению, поскольку lambda захватывает по ссылке, перемещается в поток, тогда область, в которой данные действительны, остается. – Yakk
Похоже, у вас слишком много брекетов. – TartanLlama
Ваш код не компилируется, как есть, там скобки везде, 't' не объявлен, ... После очистки у меня нет проблем с компиляцией этого, поэтому вы должны предоставить [MCVE] (http://stackoverflow.com/помощь/mcve). – Holt