
Envoyé par
devroot
J'essaie avec emplace au lieu de push mais j'obtiens l'erreur suivante :
Normal, ma supposition n'était pas bonne. Tu as codé ta propre queue, à laquelle tu n'as pas ajouté de fonction membre emplace().
Et ce ne sont pas non plus des std::thread que tu y stockes, mais des std::function<void()>.
Donc mis bout à bout, ton code devrait fonctionner avec la première ligne que tu as commenté :
workQueue.push(std::bind(f, std::forward<Args>(arg1)...));
L'erreur :
EXPRESSION CONTAINS UNEXPANDED PARAMETER PACK 'arg1'
peut s'expliquer avec la seconde workQueue.push( std::bind(f, std::ref(arg1) )); où tu ne développes pas le parameter pack arg1 avec les ....
Note au passage que std::ref() n'est utile que si la fonction passée attend une référence en paramètre.
L'autre erreur :
NO MATCHING FUNCTION FOR CALL TO INVOKE
par contre se situe à mon avis dans une partie de code que tu n'as pas encore montré.
Je t'invite donc à nous fournir un ECM (Exemple Complet Minimal) qui reproduit le problème.
Partager