Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > С++, перегрузка оператора приведения типа


Автор: Graf_h 19.2.2010, 12:16
Всем привет. Помогите решить проблемку:  Есть класс

Код

template<typename T>
class V_SmartPointer{
T* ref;
...
}


далее в коде

Код

V_SmartPointer<V_GameServer> srv(new V_LocationSrv());
V_LocationSrv* refsrv=srv;//!!! эта строчка не выполнится



пробовал так

Код

T* operator=(V_SmartPointer<T>& ref){
     return ref.ref
}

T* operator T*(V_SmartPointer< T>& ref){
     return ref.ref
}


Ругается (
 


Автор: SenkraD 19.2.2010, 12:34
Graf_h,  если не изменяет память, то оператор привидение типа пишется так:
Код
operator <Type with spec>() [const|throw]

Автор: azesmcar 19.2.2010, 12:48
Код

operator T* () const {
    return ref;
}


Автор: SenkraD 19.2.2010, 12:56
Вот маленький приммер:
Код
template<typename T>
struct SimpleRaii
{
public:
    SimpleRaii(T* ptr)
        : m_ptr(ptr)
    {
    }

    operator T*(void)
    {
        return m_ptr;
    }

    operator T const*(void) const
    {
        return m_ptr;
    }

private:
    T* m_ptr;
};

struct Foo
{
};

int main(int argc, char const* const argv[])
{
    SimpleRaii<Foo> smartRtr(new Foo);
    Foo *fooPtr = smartRtr;
    fooPtr = fooPtr;

    return 0;
}

Автор: Graf_h 19.2.2010, 13:06
Точно работает, всем большое спасибо).  smile 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)