0
votes

STD :: initialiszer_list avec std :: thread

namespace myNameSpace {
    template<typename T>
    void functionName(T* cm, std::initializer_list<std::string_view> args) { ... }
}

5 commentaires

@George Nous avons une section entière consacrée aux réponses complètes avec des fonctionnalités de révision et d'acceptation par les pairs - veuillez l'utiliser! Survolez votre souris sur le lien "Ajouter un commentaire" pour voir quels commentaires ne sont pas pour; Envisagez également de prendre le Tour à nouveau pour actualiser vos connaissances sur la façon dont le modèle fonctionne. Merci!


Vous ne devez pas passer des listes d'initialisateur à travers les limites de threads comme celle-ci. Utilisez un type de conteneur approprié.


S'il vous plaît ne corrigez pas les erreurs pertinentes dans votre question. Il existe déjà des réponses expliquant l'erreur que vous avez fixée et votre édition invaliderait celles-ci. J'ai retourné votre édition.


Vous devez présenter votre code sous la forme d'un exemple de reproductible minimal , comme Ceci . Sauvez-nous de devoir le faire pour que vous puissiez voir le problème.


@Aseroids avec ailes Mon commentaire était juste pour mettre en surbrillance la syntaxe incorrecte (la mine ironiquement était également incorrecte) et le problème avec la création d'un fil temporaire. Je n'ai rien expliqué pour que cela ne soit tout simplement pas senti valable de poster comme une réponse (je l'ai supprimé de toute façon pour l'erreur susmentionnée) :).


3 Réponses :


3
votes

Tout d'abord, ce n'est pas la façon dont vous démarrez un fil. Vous l'appelez et transmettez le résultat comme un argument pour démarrer le fil. Mais, void code> n'est pas un argument valide pour le démarrage d'un thread, ni une sorte d'expression utile en aucun sens.

Vous écririez quelque chose comme ça à la place: p>

std::thread(&myNameSpace::functionName<ClassName>, this, std::initializer_list<std::string_view>{"abc", "abc1"});


0 commentaires

2
votes

std :: thread reçoit un appel téléphonique comme premier paramètre, vous l'avez envoyé vide (le résultat d'invocation de myNamespace :: modeName ).

Ce que vous devez faire est xxx

Notez que la coulée explicite sur std :: initialisizer_list est requise, comme std :: initialiszer_list est un type non déductible.


0 commentaires

1
votes

Pour les threads Vous devez fournir des paramètres de référence de fonction et d'arguments dans la liste des arguments comme suit: xxx pré>

Dans votre cas, vous devez fournir les arguments comme suit: p>

std::thread(myNameSpace::functionName<ClassName>,this, std::initializer_list<std::string_view>({"abc", "abc1"})); 


0 commentaires