Re[4]: RSDN handle library
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 23.07.04 12:47
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>
Д>namespace Util {

Д>    template<typename T_Handle, BOOL (WINAPI *CloseFun)(T_Handle)>
Д>    class CSmartHandleT
Д>    {
Д>    public:
Д>        CSmartHandleT() :
Д>            m_Handle(0)
Д>        {
Д>        }
...
Д>


ИМХО приятный код. Меня только одно смутило — для файловых хэндлов логичным значением является INVALID_FILE_HANDLE...
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[4]: RSDN handle library
От: _nn_ www.nemerleweb.com
Дата: 23.07.04 15:10
Оценка: 4 (1)
Здравствуйте, Дарней, Вы писали:

Надеюсь вы не против критики

Мне кажется что лучше использовать Traits вместо параметра в виде указателя на функцию.
struct Handle_Traits_Base
{
 static HANDLE InitValue() { return INVALID_HANDLE_VALUE; }
};

struct Handle_Traits_Base_0
{
 static HANDLE InitValue() { return 0; }
};

struct Handle_Traits : public Handle_Traits_Base
{
 static BOOL Close(HANDLE h) { return ::CloseHandle(h); }
};

struct File_Traits : public Handle_Traits_Base
{
 static BOOL Close(HANDLE h) { return ::FindClose(h); }
};

struct Library_Traits : public Handle_Traits_Base_0
{
 static BOOL Close(HMODULE h) { return ::FreeLibrary(h); }
};


//...

template<typename T_Handle, typename TTraits>
    class CSmartHandleT
{
public:
        typedef TTraits traits_type;

        CSmartHandleT() :
            m_Handle(TTraits::InitValue())
        {
        }

         void Destroy() {
            if (!IsEmpty())
            {
                BOOL bRes = TTraits::Close(m_Handle);
                _ASSERTE(bRes);
                m_Handle = 0;
            }
        }
//...
};

 typedef CSmartHandleT<HANDLE, Handle_Traits> CHandle;
 typedef CSmartHandleT<HANDLE, FileFind_Traits> CFindHandle;
 typedef CSmartHandleT<HMODULE, Library_Traits> CLibHandle;
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: RSDN handle library - уточнение
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 23.07.04 17:19
Оценка: +1
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>ИМХО приятный код. Меня только одно смутило — для файловых хэндлов логичным начальным значением является INVALID_FILE_HANDLE...
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[6]: RSDN handle library - уточнение
От: Дарней Россия  
Дата: 26.07.04 04:12
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, SchweinDeBurg, Вы писали:


SDB>>ИМХО приятный код. Меня только одно смутило — для файловых хэндлов логичным начальным значением является INVALID_FILE_HANDLE...


э.... в первый раз слышу про такого зверя
м.б. INVALID_HANDLE_VALUE?
Просто разные функции API используют как "нулевое" значение 0 или -1 (AKA INVALID_HANDLE_VALUE), причем никакой системы тут мне обнаружить не удалось.
В любом случае — если хэндл не валиден, передавать его в функции АПИ не предполагается, так что его реальное значение никакой роли не играет.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: RSDN handle library
От: Дарней Россия  
Дата: 26.07.04 04:16
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, Дарней, Вы писали:


__>Надеюсь вы не против критики


нет, конечно
вообще, идея хорошая. Так будет немного получше
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[7]: RSDN handle library - уточнение
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 26.07.04 04:34
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>э.... в первый раз слышу про такого зверя

Д>м.б. INVALID_HANDLE_VALUE?

Сорри — облажался... Конечно — INVALID_HANDLE_VALUE.
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re: Название библиотеки
От: Блудов Павел Россия  
Дата: 11.12.08 08:12
Оценка: 26 (1) :))) :))
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Очень вкусно выглядит! Спасибо! Но есть маленькое предложение — переименовать эту библиотеку в HTL (Handle Template Library). Будет единообразно с ATL и WTL.


Done За это время моя средняя дочь успела родиться, вырости и пойти в школу.

Выложил в http://www.codeplex.com/htl
Svn-cсылка https://htl.svn.codeplex.com/svn/trunk

По умолчанию ведёт себя как ATL, т.е. добавляет
using namespace HTL;

Чтобы не было конфликтов с ATL::CEvent и т.п. Нужно делать так:
#define _HTL_NO_AUTOMATIC_NAMESPACE
#include <htl.h>
htl handle template library
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.