2016-12-10 3 views
1

ich bei der „DLIB‚Suche -Bibliothek, genauer gesagt die‘find_min“ Funktion, die für „Optimierung“ verwendet wird (http://dlib.net/optimization_ex.cpp.html). Mit der Funktion "find_min" können Sie Ihre eigene Funktion als Argument übergeben, aber Ihre eigene Funktion benötigt nur ein Argument. Allerdings muss die Funktion, die ich übergeben muss zu viele Argumente (7 tatsächlich), aber ich brauche sie.Ist es möglich, eine Funktion "auszutricksen" ein Argument zu nehmen, wenn es in C++ mehrere erwartet?

So ist meine Frage:

Gibt es eine Möglichkeit, um meine Argumente „zu komprimieren“, so dass es wie nur einer scheint, oder vielleicht eine Möglichkeit, eine Funktion zu ändern, so dass es nur ein Argument, aber immer noch alle bekommt die Argumente, die auf andere kluge Weise benötigt werden?

+1

Können Sie die Frage bearbeiten, um zu erwähnen, wo genau in 'dlib' Sie eine Funktion als Argument übergeben? –

Antwort

1

Sagen Sie bitte diese Funktion haben: die Argumente in einer Struktur alle

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

Stuff und eine Wrapper-Funktion machen, die eine einzelne Struktur Argument:

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

Sie eine Struktur definieren Das enthält alle Ihre Argumente und macht die Funktion einen Zeiger auf diese Struktur als einziges Argument.

Beispiel:

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

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

die Funktion aufzurufen:

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

Hinweis, wenn alle Parameter vom gleichen Typ sind, könnten Sie besser sogar ein vector ohne die Notwendigkeit verwenden, um eine Struktur zu definieren, .

Verwandte Themen