Voilà la question.Quelque chose comme les paramètres C# en C++?
Répondre
Pour C++ non géré avec la même syntaxe pratique, non.
Mais il existe un support pour variable argument lists pour les fonctions en C++.
Fondamentalement, vous déclarez une fonction avec le dernier paramètre étant une ellipse (...), et dans le corps de la fonction, utilisez les appels va_start()/va_arg() pour analyser la liste de paramètres fournie.
Ce mécanisme est de type pas sûr, et l'appelant pourrait passer quoi que ce soit, vous devriez donc documenter clairement l'interface publique de la fonction et ce que vous attendez à être transmis.
pour le code managé C++, voir les commentaires de Reed .
Oui. En C++ standard, vous pouvez utiliser va_arg et la syntaxe ... Voir MSDN for details.
Pour C++/CLI, il existe un raccourci pour cela.
vous faites cela comme:
void TheMethod(String^ firstArgument, ... array<Object^>^ variableArgs);
Voir cette blog post for details.
Bon à savoir à ce sujet ... ne savait pas que C++ avait cette extension pour code managé. – LBushkin
@LBushkin: mise à jour vers la meilleure syntaxe. –
Il y a une bibliothèque named parameters en boost (si j'ai bien compris ce que sont les paramètres en C#). Il permet d'écrire des fonctions comme celles-ci:
int y = lib::f(_name = "bob", _index = 2);
Impossible d'indiquer si un surdébit significatif est impliqué.
Les paramètres C# ne sont pas nommés params - c'est une liste d'arguments de longueur variable. –
De nos jours, avec le C++ moderne, vous pouvez utiliser des pratiques modernes de type sécurité pour les fonctions variées.
Utilisez soit des modèles variadique ou std :: initializer_list si tous vos arguments ont le même type
Avec modèle variadique, vous utilisez récursion passer par une liste de paramètres variadique. Variadique exemple de modèle:
template<class T>
void MyFoo(T arg)
{
DoSomething(arg);
}
template<class T, class... R>
void MyFoo(T arg, R... rest)
{
DoSomething(arg);
// If "rest" only has one argument, it will call the above function
// Otherwise, it will call this function again, with the first argument
// from "rest" becoming "arg"
MyFoo(rest...);
}
int main()
{
MyFoo(2, 5.f, 'a');
}
Cela garantit que si DoSomething, ou tout autre code que vous exécutez avant l'appel récursif à MyFoo, a une surcharge pour le type de chaque argument que vous passez à la fonction MyFoo, que la surcharge exacte être appelé.
Avec std :: initializer_list, vous utiliser une simple boucle foreach pour passer par les arguments
template<class T>
void MyFoo(std::initializer_list<T> args)
{
for(auto&& arg : args)
{
DoSomething(arg);
}
}
int main()
{
MyFoo({2, 4, 5, 8, 1, 0}); // All the arguments have to have the same type
}
Il peut être intéressant de noter que vous pouvez également combiner des modèles 'static_assert' et variadic pour créer votre liste d'initialiseurs flexible. F.ex. vous pouvez combiner 'std :: is_base_of' avec un static_assert sur' T' dans votre exemple pour vous assurer que tous les types sont dérivés d'une certaine classe de base. – atlaste
- 1. Quelque chose comme print END << END; en C++?
- 2. Quelque chose fonctionne comme "did Init" ?? [objectif-c]
- 3. Il y a vraiment quelque chose comme Objective C++?
- 4. C++ vecteur littéraux, ou quelque chose comme eux
- 5. Quelque chose comme TryParse pour les dates/heures en C++ (non-Windows)?
- 6. composant ImageGrid ou quelque chose comme ça
- 7. C# menu tooltrip & quelque chose de plus
- 8. Lire quelque chose après un mot en C++
- 9. Y a-t-il quelque chose comme getattr() de Python en C#?
- 10. Quelque chose comme SciPy dans Ruby?
- 11. Quelque chose comme Crystal Reports pour PHP?
- 12. Y a-t-il quelque chose comme 'with' de Python en C#?
- 13. Comment faire quelque chose comme ça dans Scala?
- 14. Y a-t-il quelque chose comme la bibliothèque C# (.NET) qui fonctionne comme API pour Google?
- 15. Comment fonctionnent les chaînes lorsque vous copiez quelque chose en C#?
- 16. Existe-t-il quelque chose comme Or-Equals de Ruby dans .NET/C#?
- 17. Est-ce que python a quelque chose comme C++ utilisant un mot-clé?
- 18. Y a-t-il quelque chose comme la déclaration d'évaluation de Matlab dans Objective-C 2.0?
- 19. Y a-t-il quelque chose comme Character.digit de java (char ch, int radix) dans C#?
- 20. Moteur de rendu Wiki pour C#? comme redcloth, BlueCloth, ou quelque chose de décent
- 21. Quelle est la différence entre déclarer comme nouveau et comme quelque chose = quelque chose de nouveau dans vb.net?
- 22. recherche d'interface pour quelque chose comme Appendable ou OutputStream
- 23. PHP 'quelque chose comme widget' conception du code
- 24. Comment convertir quelque chose de "string *" en "const string &" en C++?
- 25. Ruby analyseur de code source (quelque chose comme pylint)
- 26. Quelque chose comme dictionnaire, mais peut stocker plus d'une valeur?
- 27. Y a-t-il quelque chose comme Acegi pour PHP?
- 28. Comment emballer un int [,] avec quelque chose comme une ReadOnlyCollection?
- 29. Quelque chose comme mapM, mais pour les tableaux? (comme arrayMap, mais mappage d'une fonction impure)
- 30. url MVC réécrire quelque chose comme http://controller.website.com
Pouvez-vous s'il vous plaît nous dire ce que les programmeurs C++ vous avec l'homme "C# params"? –
@ JohannesSchaub-litb c'est le [params] (https://msdn.microsoft.com/fr-fr/library/w5zay9db.aspx) mot-clé – jxramos