2016-12-10 1 views
1

Je cherche à la fonction "Dlib "-library, plus précisément le" find_min" qui est utilisé pour "optimisation" (http://dlib.net/optimization_ex.cpp.html). La fonction "find_min" vous laisse passer votre propre fonction comme un argument, mais votre propre fonction doit prendre un seul argument. Cependant la fonction que j'ai besoin de passer a trop d'arguments (7 en fait), mais j'en ai besoin.Est-il possible de "tromper" une fonction en prenant un argument quand elle attend plusieurs en C++?

Alors ma question est la suivante:

est-il un moyen de « compresser » mes arguments il semble que seul, ou peut-être un moyen de changer une fonction de sorte qu'il ne prend qu'un seul argument, mais obtient toujours tout les arguments qui sont nécessaires d'une autre manière intelligente?

+1

Pouvez-vous éditer la question pour indiquer où exactement dans 'dlib' vous passez une fonction en tant qu'argument? –

Répondre

1

Dites que vous avez cette fonction:

int seven_args(int a, char b, double c, int d, int e, int f, int g) { 
    ... 
} 

Stuff tous les arguments dans une struct et faire fonction d'emballage qui prend un seul argument struct:

struct seven_args_arguments { 
    int a; 
    char b; 
    double c; 
    int d; 
    int e; 
    int f; 
    int g; 
} 

int wrapper(seven_args_arguments args) { 
    return seven_args(args.a, args.b, args.c, args.d, args.e, args.f, args.g); 
} 
0

Vous pouvez définir une structure que cela contienne tous vos arguments et que la fonction prenne un pointeur sur cette structure comme seul argument.

Exemple:

Struct MyStruct {int param1; double param2; char param3;} 

void MyFunction(const MyStruct* p) {......} 

Pour appeler la fonction:

MyStruct params { 1, 2.5, 'c'}; 
MyFunction(&params); 

Avis si tous vos paramètres sont du même type, vous pouvez même utiliser mieux un vector sans la nécessité de définir une structure .