Специализация шаблонов
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.05.06 11:42
Оценка:
Привет !

Итак VC6 sp5. В классе CBlahBlah понадобился хитрый метод OnChangeObjectName, который будет для типа IPNode выполнять действия отличные от действий для объектов других типов(общих наследников нет и быть не может).

Пробовал перегрузить OnChangeObjectName, компилер не смог разрулить. Специализации методов вроде как нет ?
Вобщем вышло что вышло.

Просьба — подскажите пожалуйста путь покороче. Леплю конфетку из дерьма, так что дизайн и тд просьба не ругать.

class CBlahBlah
{
    template<class Extensible>
    class ChangeObjectName
    {
        public:
        static HRESULT OnChangeObjectName(SBDoc *pDoc,Extensible* pObj,LPCTSTR newName)
        {
            // общий случай
            return hr;
        }
    };

    template<>
    class ChangeObjectName<IPNode>
    {
        public:
        static HRESULT OnChangeObjectName(SBDoc *pDoc,IPNode* pObj,LPCTSTR newName)
        {
            // конкретный случай
            return hr;
        }
    };

    template<class Ext>
    HRESULT OnChangeObjectName(Ext *pExt,LPCTSTR newName)
    {
        return ChangeObjectName<Ext>::OnChangeObjectName(m_pDoc,pExt,newName);
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.