2012-06-12 2 views
2

J'écris une fonction d'approximation en prenant deux valeurs de tolérance différentes comme paramètres:Meilleur design pour éviter "variable locale comme paramètre par défaut"?

bool Approximate(vector<PointC*>* pOutput, LineC input, double horizontalTolerance, double verticalTolerance) 

Je veux la fonction pour définir verticalTolerance = horizontalTolerance si verticalTolerance n'est pas réglé. Alors, je veux accomplir quelque chose comme:

bool Approximate(vector<PointC*>* pOutput, LineC input, double horizontalTolerance, double verticalTolerance=horizontalTolerance) 

Je sais que cela est impossible parce local variables are not allowed as default parameters. Donc ma question est, quelle est la meilleure façon de concevoir cette fonction?

Les options que je pensais de sont:

  1. Ne pas utiliser un paramètre par défaut et permettre à l'utilisateur définir explicitement les tolérances.

  2. Régler la valeur par défaut de verticalTolerance à une valeur négative et remise à horizontalTolerance si elle est négative:

    bool Approximate(vector<PointC*>* pOutput, LineC input, double horizontalTolerance, double verticalTolerance=-1) 
    { 
        if (verticalTolerance < 0) 
        { 
         verticalTolerance = horizontalTolerance; 
        } 
        // Rest of function 
    } 
    

Dans mon oppinion, un point n'est pas une solution mais un by-pass, et le deuxième point ne peut pas être la solution la plus simple.

+2

Peut-être utiliser la surcharge de fonction – marcinj

Répondre

7

Vous pouvez également utiliser la surcharge:

bool Approximate(vector<PointC*>* pOutput, LineC input, 
        double horizontalTolerance, double verticalTolerance) 
{ 
//whatever 
} 

bool Approximate(vector<PointC*>* pOutput, LineC input, 
        double tolerance) 
{ 
    return Approximate(pOutput, input, tolerance, tolerance); 
} 

Cela imite parfaitement ce que vous voulez atteindre.

+0

@ n.m. Merci pour l'édition. –

+0

+1, mais je voudrais nommer nitpickingly le paramètre de tolérance unique "tolérance", sinced ce n'est pas seulement horizontal. – molbdnilo

+0

@molbdnilo vous avez raison. –

Questions connexes