この質問に最適なタイトルがあるかどうかはわかりません。自由に改善してください。
私が持っている場合
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();
}
戻り値の型の問題を残して (つまり、戻り値の型が void であると仮定して)、このパターンをジェネリック化することは可能で、次のような 1 つのラッパー関数を記述するだけで済みます。
// ????? 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();
}