【发布时间】:2012-02-03 19:22:14
【问题描述】:
我正在考虑做一个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++ 的 OOP 设计模式?
我自己放弃了这个,但出于好奇把它放在这里,也许是一些非常有用的见解。
【问题讨论】:
-
额外抽象的价值是什么?为什么不直接使用带有上下文指针的已知回调函数类型呢?我猜我看不到这里的增值。
标签: c++ c design-patterns callback argument-passing