J'essaye de créer un objet qui peut recevoir une fonction et ses paramètres à son constructeur. Cette classe appellera alors la fonction donnée à l'intérieur d'un lambda qui est plutôt passé à un thread. Quelque chose le long des lignes deFonction d'appel à l'intérieur d'un lambda passé à un thread
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;
}
Mais je reçois l'erreur suivante
error: parameter packs not expanded with '...': f(args...);
Qu'est-ce que je fais mal ici? Toute aide serait appréciée.
Quel compilateur? Indépendant de l'erreur de votre compilateur, mais vous devez savoir que le code tel qu'il est écrit va probablement aboutir à un comportement indéfini, car le lambda capture par référence, est déplacé dans un thread, puis la portée où les données sont valides est laissée. – Yakk
On dirait que vous avez trop d'accolades. – TartanLlama
Votre code ne compile pas comme il est, il y a des crochets partout, 't' n'est pas déclaré, ... Après le nettoyage, je n'ai aucun problème pour compiler ceci, donc vous devriez fournir un [MCVE] (http://stackoverflow.com/help/mcve). – Holt