используется слудующее, для очистки данных WinAPI функций.
template <typename T, typename F, F func>
class Object {
private :
boost::shared_ptr<void> m_ptr;
public :
Object (T ptr) : m_ptr (ptr, func) {}
~Object() {}
const Object& operator = (T ptr) {...}
operator T (void) const { return static_cast<T> (m_ptr.get()); }
void reset (void) { m_ptr.reset(); }
};
Тоесть лубая WinAPI функция, подчищающая ресурсы может поиметь свою обертку. например
typedef Object <LPVOID, BOOL (WINAPI *)(HANDLE), ReleaseMutex> HMutex;
typedef Object <HDEVINFO, BOOL (WINAPI *)(HDEVINFO), SetupDiDestroyDeviceInfoList> HDevice;
typedef Object <HDEVNOTIFY,BOOL (WINAPI *)(HDEVNOTIFY ), UnregisterDeviceNotification> HNotify;
...
Можно ли как typedef-у скормить функтор со 2-м аргументом = NULL
Здравствуйте, k732, Вы писали:
K>Можно ли как typedef-у скормить функтор со 2-м аргументом = NULL
Можно конечно:
template<typename T, void (*Func)(T)>
class Object
{
// ...
};
typedef int handle_t;
void destroy_handle(handle_t) {}
typedef Object<handle_t, &destroy_handle> DestroyHandle;
int main(){}
Примечание: Вам нужно BOOL (WINAPI *Func)(T).
А вообще могу посоветовать:
shared_ptrАвтор: _nn_
Дата: 30.08.06