Я думал о выполнении функции take_timing
, которая бы принимала время любой функции, переданной ей. любая функция означает, что аргументы, которые принимает этот обратный вызов, неизвестны вызывающей стороне. Это займет слишком аргументы для обратного вызова. Но так как он не знает, как его вызвать, потребуется другая функция обратного вызова, вызывающая функцию обратного вызова, написанная пользователем функции. Заглушка будет примерно такой:
void take_timing(
void (*callback)(),
void (*caller(void (*callback)(),void* args_struct),
void* args_struct
)
{
// Start timer
caller(callback,args_struct);
// Stop timer, read timings, record...
}
void some_caller(void (*callback)(),void* args_struct)
{
// Cast "callback" to function signature
// Cast args_struct to some struct with args
// Call the callback with correct args signature
}
Итак, мои вопросы:
- Возможно ли это?
- Может ли он использовать список переменных аргументов, чтобы упростить его? Как? Я беспомощен в этом ...
- Есть ли лучший способ сделать это? Или просто лучше сделать
take_timing
для каждого конкретного случая?
- Есть ли для этого шаблон проектирования ООП для использования с C ++?
Я сам отказался от этого, но выразил это здесь из любопытства, может быть, очень полезных идей.