Je cherche à dérouler un gabarit variable dans des fonctions distinctes utilisées dans la conjonction d'un mais cela me donne l'erreur: p> Erreur C3520: Je veux la ligne: Exemple live < / kbd> p> p> si code> -Statement. Voici un exemple de ce que j'essaie de faire:
args code>: le paquet de paramètres doit être étendu dans ce contexte P>
blockQuote>
si (bar
si (bar <0u> (param) && Bar <1u> (param) && bar <2u> (param)) code> y a-t-il une façon de le faire? Ou existe-t-il un adaptateur supplémentaire que je peux utiliser qui accomplira ceci? P>
3 Réponses :
Vous avez besoin d'un couple supplémentaire de parenthèses évidemment si votre compilateur prend en charge C ++ 17 (pliage de modèle). P> Peut-être plus clair comme suit P>
Si votre compilateur prend en charge C ++ 17's pli-expressions dont vous avez besoin Pour changer deux choses pour le faire fonctionner:
1.Changer l'ordre des paramètres de modèle dans 2.Ajouter une paire de parenthèses à l'intérieur Exemple en direct kbd> p> p> bar code> de sorte que
t code> peut être déduit lorsque
i code > En termes explicitement spécifiés: p>
si code> puisqu'il s'agit d'une partie obligatoire d'une expression complexe: p>
Donc, dans l'événement triste que le mien ne [Soutenez les expressions de pliage] em> ... Puis-je faire quelque chose? P>
Eh bien, si c'est vraiment le cas et que le problème n'était pas uniquement pour Oublier les parenthèses requises , alors vous pouvez aller Les modèles variadiques obligés doivent être manipulés avant C ++ 17: P>
template < typename T > bool bar(T const& param) { return true; } template <typename T, size_t I, size_t ... II> bool bar(T const& param) { return param[I] != 13 && bar<T, II...>(param); } template <typename T, size_t... ARGS> void bar(T const& param, std::index_sequence<ARGS...> const&) { if(bar<T, ARGS...>(param)) { std::cout << "no matches\n"; } else { std::cout << "matched\n"; } }
Utilisez un compilateur qui prend en charge le pliage?
@ Yakk-Adamnevraumont, donc dans le triste événement que le mien ne ... Puis-je faire quelque chose?