我不确定我是否有这个问题的最佳标题,请随时改进。
如果我有
typedef void (*VoidFunction)(void);
然后是适合这种类型的一系列函数,我可以编写一种“事务”包装函数,如下所示:
void doTransaction(VoidFunction function)
{
doSomePreambleWork();
function();
doSomePostambleWork();
}
如果我有一系列接受单个 int 参数的函数,我可以清洗-冲洗-重复:
typedef void (*VoidOneIntFunction)(int a);
void doTransactionOneInt(VoidFunctionOneInt function, int a)
{
doSomePreambleWork();
function(a);
doSomePostambleWork();
}
留下返回类型的问题(iow,假设返回类型为 void),是否可以泛化这种模式,这样我只需要编写一个包装函数,例如:
// ????? I'm not sure how i'd type the passed function
void doTransactionGeneric(void * function, ...)
{
doSomePreambleWork();
function(); // ????? and i don't know how i'd go about calling it...
doSomePostambleWork();
}