Код: Выделить всё
#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)
Теперь я рассмотрел функцию повтора, которая принимает указатель на функцию в качестве аргумента. Но, похоже, я что-то упустил, так как не могу скомпилировать этот код.
Примечание. Этот код ниже НЕ функционален, я подумал, что могу опубликовать простой код, иллюстрирующий то, что я хочу сделать:
Код: Выделить всё
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]