2010-08-23 4 views
0

Скажем, у меня есть функция f(a, b, c). Можно ли создать указатели функций g и h, чтобы при использовании g и h они использовали заданное значение для одного из аргументов?Указатели функции C++ и аргументы предварительной настройки

Например, (*g)(b, c) будет эквивалентен f(1, b, c) и (*h)(b, c) будет эквивалентом вызова f(2, b, c).

Причина, по которой я делаю это, заключается в том, что я вызываю функцию, к которой я могу получить указатель (через dlsym), и эта функция имеет совершенно другое поведение в зависимости от того, что является первым аргументом (настолько, что они должны На самом деле это одно и то же. Более того, переменная указателя функции, которая используется в основной программе, может принимать только два аргумента, поскольку это особый случай, когда импортированная функция имеет три (но на самом деле нужно только две, по сути, это параметр параметров).

Спасибо.

+1

То, что вы хотите, называется currying. Посмотрите на этот вопрос: http://stackoverflow.com/questions/152005/how-can-currying-be-done-in-c – camh

+1

@camh: Обратите внимание, что этот вопрос был задан довольно давно. Теперь ответы, указывающие на 'std :: bind' (из' boost :: bind', будут подавляющими. ':)' – sbi

ответ

3

Я не понимаю, почему вы можете это сделать, если вы определили функцию г точек в качестве

void gfunc(int b, int c) { 
    f (1, b, c); 
} 
g = &gfunc; 

лучший способ сделать это в C++, вероятно, использует функторы.

+0

Он, по-видимому, использует параметры по умолчанию. – aggsol

+0

+1 для функторов. Однако решение Hemal довольно простое, и VolatileStorm может иметь желаемые h и g. –

+0

@Stephane: но подпись указателей функций больше не соответствует. – aggsol

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