2016-12-10 6 views
1

Я смотрю на "dlib "-library, более конкретно функции" find_min", который используется для "оптимизации" (http://dlib.net/optimization_ex.cpp.html). Функция «find_min» позволяет передавать вашу собственную функцию в качестве аргумента, но ваша собственная функция должна принимать только один аргумент. Однако функция, которую мне нужно передать, имеет слишком много аргументов (фактически на самом деле), но мне они нужны.Можно ли «обмануть» функцию принять один аргумент, если он ожидает нескольких в C++?

Так что мой вопрос заключается в следующем:

Есть ли способ, чтобы «сжать» мои аргументы, так что кажется, что только один, или, может быть, таким образом, чтобы изменить функцию так, что требуется только один аргумент, но все-таки получает все аргументы, которые необходимы каким-то другим умным способом?

+1

Можете ли вы отредактировать вопрос, чтобы указать, где именно в 'dlib' вы передаете функцию в качестве аргумента? –

ответ

1

Допустим, вы получили эту функцию:

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

Материала все аргументы в структуры и создать функцию-оболочку, которая принимает один аргумент: 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

Вы можете определить структуру что содержит все ваши аргументы и делает функцию для указателя на эту структуру в качестве единственного аргумента.

Пример:

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

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

Для вызова функции:

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

Обратите внимание, если все ваши параметры одного и того же типа, вы могли бы еще лучше использовать в vector без необходимости определения структуры ,

 Смежные вопросы

  • Нет связанных вопросов^_^