2016-12-10 9 views
1

私は "最適化"(http://dlib.net/optimization_ex.cpp.html)のために使用されている "DLIB "-library、より具体的に" find_min" 機能で探しています。 "find_min"関数を使用すると、独自の関数を引数として渡すことができますが、独自の関数では1つの引数しか取る必要がありません。しかし、私が渡す必要のある関数は引数が多すぎます(実際には7つ)が必要です。 関数を「トリックする」ことは、C++で複数を期待しているときに引数を1つ取ることは可能ですか?

は、唯一の引数を取るように、機能を変更するかもしれない唯一の、または方法のように思えるので、私の引数を「圧縮」する方法があるが、それでもすべて取得します:

は、だから私の質問はこれです他のスマートな方法で必要とされる議論?構造体の中に

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

スタッフすべての引数と単一構造体引数を取るラッパー関数を作る:

+1

'dlib'のどこに関数を引数として渡しているのかを述べるために質問を編集できますか? –

答えて

1

は、あなたがこの機能を持っていると言う

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

あなたが構造を定義することができますそれはあなたのすべての引数を含み、関数がその構造体へのポインタを唯一の引数として取るようにします。

例:

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

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

機能を呼び出すために:

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

お知らせすべてのパラメータが同じタイプであるならば、あなたはより良い構造を定義することなくvectorを使用することができます。

関連する問題