2010-08-10 5 views
4

J'ai fil fonction de reproduction qui accepte de nombreux paramètres qui ont des valeurs par défaut dans la déclaration.affectation des paramètres avec des valeurs par défaut pour une fonction

int spawn (fonction funcptr, vide arg = 0, int grp_id = 1, const char threadname);

Je veux initialiser premier paramètre func et le nom du dernier fil des paramètres et des variables restantes attribuées à leurs valeurs par défaut.

spawn (myfunc, "Mon fil");

Comment puis-je faire cela.

Répondre

6

Vous ne pouvez pas.

Autres langues prennent en charge des choses comme spawn(myfunc, , , "MyThread"), mais pas C++.

Au lieu de cela, juste surchargez à votre goût:

inline int spawn(funcptr func, const char*threadname) { 
    return spawn(func, 0, 1, threadname); 
} 
0

Ce n'est pas possible en C++, une fois que vous attribuez une valeur par défaut pour un paramètre tous les paramètres suivants doivent aussi avoir des paramètres par défaut. La seule option est de réorganiser les paramètres de sorte que tous les paramètres pour lesquels les valeurs par défaut peuvent être attribuées viennent à la fin.

1

Les autres réponses sont techniquement correctes, mais il est possible de le faire, en utilisant la bibliothèque Boost.Parameter. Cependant, il nécessite un peu d'installation, et peut ou ne peut pas en valoir la peine pour vous.

1

De here,

Paramètres avec des arguments par défaut doivent être les paramètres de suivi dans la liste des paramètres de déclaration de fonction.

Par exemple:

void f(int a, int b = 2, int c = 3); // trailing defaults 
void g(int a = 1, int b = 2, int c); // error, leading defaults 
void h(int a, int b = 3, int c);  // error, default in middle 

Donc, si vous êtes celui qui déclare et définir votre fonction spawn(), vous pouvez les valeurs par défaut à la fin .. Et l'inverse est impossible rond ..

Questions connexes