Nombre indéfini d’arguments en C ++

Puis-je surcharger ma fonction pour faire quelque chose avec beaucoup d’arguments comme en JavaScript . Par exemple:

function f() { alert(arguments[0]); } f(4); // will alert 4 

Puis-je faire la même chose en C ++ ?

Vous pouvez utiliser des arguments et des tuples de modèles variadiques:

 #include  #include  template  void f(Args&&... args) { auto arguments = std::make_tuple(std::forward(args)...); std::cout << std::get<0>(arguments); } void f() {} // for 0 arguments int main() { f(2, 4, 6, 8); } 

Démo en direct

Pour vérifier les limites, essayez ce qui suit:

 #include  #include  template  struct input { std::tuple var; input(T&&... t) : var(std::forward(t)...) {} template ::value> auto get() -> typename std::tuple_element>::type { return std::get(var); } }; template  void f(Args&&... args) { auto arguments = input(std::forward(args)...); std::cout << arguments.template get<9>(); } void f() {} // for 0 arguments int main() { f(2, 4, 6, 8); } 

Mise à jour: Si vous avez besoin du premier argument, vous voulez simplement une fonction qui expose ce premier argument en le séparant du pack de parameters:

 template void foo(Head&& head, Tail&&... tail); 

Si ce n’est pas satisfaisant (c’est-à-dire que vous voulez obtenir le nième argument), vous pouvez décompresser les arguments dans un std::tuple<> et récupérer un élément avec std::get<> :

 template void foo(Args&&... args) { auto t = std::forward_as_tuple(std::forward(args)...); print(std::get<5>(t)); }