Пароль в качестве параметра функции вместо объявления обратного вызова - PullRequest
0 голосов
/ 24 марта 2012

Я думаю, что некоторые более новые языки, такие как JS, могут делать это изначально, но я забыл термин для этого (сделайте «временную» функцию встроенной, чтобы передать как обратный вызов)

То, что я хочу сделать, это ...

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

Это работает нормально, и я могу оставить это и двигаться дальше, но ... Мне просто любопытно ...

иногда функция излишня, и мне просто нужно одно сравнение; когда-нибудь небольшой блок кода будет делать. Возможно, я мог бы просто оценить их как нулевое / ненулевое значение во время выполнения? Но как передать в качестве параметра?

На данный момент моя функция имеет следующую подпись

void AddExpectedCommand(E_peripheralType peripheral, 
                        communicationBlock_t commandBlock, 
                        errorMessage_t errorMessage, 
                        void *(*DoRunTimeChecks)(E_boolean));

где последний параметр - указатель на функцию обратного вызова, возвращающую логическое значение.

Можно ли как-нибудь вместо этого передать выражение кода в качестве параметра?

Или функция кажется "чище"?

Заранее спасибо за любую помощь ...


Обновление: упс, я неправильно понял свое заявление. Я хочу передать указатель на функцию, которая не имеет параметров и возвращает e_Boolean ... как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

С C ++ 11 вы можете сделать следующее:

Функция, принимающая функцию, которая возвращает bool:

 void f(function<bool()>);

Вызовите ее с лямбда-выражением, захватывающим локальную переменную:

 int x = ...;

 f([&x]() { return (x > 2); });

Или вызвать его с помощью некоторой функции g, которая возвращает логическое значение:

bool g();


f(g);

Или связать некоторую функцию h, которая принимает целое число и возвращает логическое значение:

bool h(int x);


f(bind(h, 2));  // ie creates a nullary function from h(2)
2 голосов
/ 24 марта 2012

То, что вы ищете, называется «лямбда-выражением» или «анонимной функцией». И они не существуют в C (но существуют в C ++ с определенными квалификациями).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...