// --------------------------------------------------------------------------
// FILE SPTR.h 2020.08.05
// --------------------------------------------------------------------------
// класс - указатель
// --------------------------------------------------------------------------
#ifndef __SPTR_20200805_H
#define __SPTR_20200805_H
// --------------------------------------------------------------------------
template
class SPTR
{
public:
private:
protected:
T *ptr;
public:
WINAPI SPTR(void);
WINAPI ~SPTR(void);
T* WINAPI operator ->(void) const;
void WINAPI operator = (T *ptr_);
T& WINAPI operator * (void) const;
// операции преобразования типа
WINAPI operator T * (void) const;
WINAPI operator bool ();
};
// --------------------------------------------------------------------------
template
WINAPI SPTR::SPTR(void) : ptr (NULL)
{
}
// --------------------------------------------------------------------------
template
WINAPI SPTR::~SPTR(void)
{
}
// --------------------------------------------------------------------------
template WINAPI SPTR::operator bool ()
{
::OutputDebugString(_T(__FUNCTION__));
//..
// вот тут можно возбудить исключительную ситуацию
//..
if(ptr) return true;
else return false;
}
// --------------------------------------------------------------------------
template
void WINAPI SPTR::operator = (T *ptr_)
{
ptr = ptr_;
}
// --------------------------------------------------------------------------
templateT& WINAPI SPTR::operator *(void)const
{
return *ptr;
}
// --------------------------------------------------------------------------
templateT* WINAPI SPTR::operator->(void)const
{
return ptr;
}
// --------------------------------------------------------------------------
template WINAPI SPTR::operator T* (void)const
{
return ptr;
}
// --------------------------------------------------------------------------
#endif