Общий механизм повтора: невозможно использовать функции C++11.C++

Программы на C++. Форум разработчиков
Anonymous
Общий механизм повтора: невозможно использовать функции C++11.

Сообщение Anonymous »

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

Код: Выделить всё

#define RETRY(function_name, param_list, max_attempts, retry_interval_usecs, error_var) \
do {                                                                                                   \
int _attempt_;                                                                                     \
\
for (_attempt_ = 0; _attempt_ < max_attempts; _attempt_++)                                         \
{                                                                                                  \
error_var = function_name param_list;                                                          \
if (error_var == SUCCESS)                                                         \
{                                                                                              \
break;                                                                                     \
}                                                                                              \
\
usleep(retry_interval_usecs);                                                                  \
}                                                                                                                                                                                                                                                                                                   \
} while (0)
Это функционально, но я постоянно слышу, что в приложении C++ определения нежелательны.

Теперь я рассмотрел функцию повтора, которая принимает указатель на функцию в качестве аргумента. Но, похоже, я что-то упустил, так как не могу скомпилировать этот код.

Примечание. Этот код ниже НЕ функционален, я подумал, что могу опубликовать простой код, иллюстрирующий то, что я хочу сделать:

Код: Выделить всё

void retry(int (*pt2Func)(void* args))
{
const int numOfRetries = 3;
int i = 1;
do
{
//Invoke the function that was passed as argument
if((*pt2Func)(args)) //COMPILER: 'args' was not declared in this scope
{
//Invocation is successful
cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/14367726/generic-retry-mechanism-cannot-use-c11-features[/url]

Вернуться в «C++»