Есть в библиотеке такой класс, TAutoClose
, освобождающий ресурсы своего члена класса, вызывая его метод Close()
, при выходе из области видимости. При этом глаза мозолит использование iObj
:
TAutoClose<RApaLsSession> cmd;
cmd.iObj.Connect();
cmd.iObj.Send();
Хочу так:
cmd.Connect();
cmd.Send();
Добавил реализацию оператора &(видел подобный фокус с оператором '*' для умных указателей), всё равно компилятор говорит, что не видит функции:
T& operator&() {
return iObj;}
Вот общий вид этой группы классов:
TAutoClose
освобождает ресурсы группы классов вида:
class RExample:
{
int handle;
public:
void Close() {}
}
И сам класс:
template <class T>
class TAutoClose
/**
@publishedAll
Automatically calls Close() on an object when that object goes out of scope.
The behaviour takes advantage of the fact that the compiler automatically
destroys objects that go out of scope.
*/
{
public:
inline ~TAutoClose();
private:
static void Close(TAny *aObj);
public:
/**
An instance of the template class.
*/
T iObj;
};
// Class TAutoClose
template <class T>
inline TAutoClose<T>::~TAutoClose()
/**
Destructor.
The implementation calls Close() on iObj, the instance of the template class.
*/
{iObj.Close();}
template <class T>
void TAutoClose<T>::Close(TAny *aObj)
{((T *)aObj)->Close();}