在我的C++代碼中,有時我需要從某些庫調用C函數。有些時候這些是成對的功能,如鎖定功能,然後是解鎖功能。我想確保我不會忘記調用解鎖功能。所以我正在嘗試編寫一個模板類來處理它,但我無法做到。如何選擇函數指針類型?
template <class T>
class CInReleaser
{
public:
CInReleaser(T func) : _func(func) {}
~CInReleaser() { _func();}
T _func;
};
void somefunc()
{
DATA something;
// call locking function
lock_something(something);
CInReleaser<XXX> release(boost::bind(unlock_something,something));
.
.
}
當somefunc()函數結束時,函數unlock_something()應該被調用。但是我無法預測類型XXX。我怎樣才能得到這個編譯?在代碼
template<typename T>
CInReleaser<T> makeReleaser(T func) {
return CInReleaser<T>(func);
}
再後來:
最好在構造函數中進行鎖定並在析構函數中進行解鎖。然後實例化一個單一的防護對象。 – juanchopanza
鎖定不會總是在相同的範圍內發生。但在構造函數中鎖定並不能解決我的問題。 – Sharath
你到目前爲止試過的是什麼,而不是XXX?你收到了哪些錯誤信息? – TobiMcNamobi