функтор для shared_ptr
От: k732  
Дата: 01.07.08 17:59
Оценка:
используется слудующее, для очистки данных 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
Re: функтор для shared_ptr
От: _nn_ www.nemerleweb.com
Дата: 01.07.08 18:20
Оценка:
Здравствуйте, 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
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.