我正在考慮做一個take_timing
函數,該函數將傳遞給它的任何函數的時間。通過任何函數這意味着這個回調所需的參數是調用者未知的。這將需要回調的參數。但是因爲它不知道如何調用它,所以需要另一個回調函數,函數用戶編寫的回調的調用者。存根會是這樣的:在C和C++中回調一個具有先前未知參數的函數
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
就好? - 有沒有OOP設計模式用於C++?
我自己放棄了這個,但是出於好奇,這可能是一些非常有用的見解。
額外抽象的價值是什麼?爲什麼不只用一個上下文指針來獲取已知的回調函數類型?我猜這裏我沒有看到增值服務。 – 2012-02-03 19:26:49