Здравствуйте!
Есть обертка над указателем:
class TPointer
{
char *p;
public:
TPointer(char *p) : p(p);
void oper1();
void oper2() const;
};
Хочется иметь возможность создавать такую обертку и над указателями на константу и над обычными указателями (над первыми соответственно можно выполнять только oper1, над вторыми — и oper1 и oper2).
Т.е. чтобы можно было так:
char *a;
const char *b;
TPointer pa(a);
const TPointer pb(b);
Как это можно сделать?
Или просто создать два класса — TPointer и TPointerConst (во втором член — const char*p)?
Спасибо.
... << RSDN@Home 1.2.0 alpha 3 rev. 880>>
Здравствуйте, Непомнящий Евгений, Вы писали:
НЕ>Здравствуйте!
НЕ>Как это можно сделать?
НЕ>Или просто создать два класса — TPointer и TPointerConst (во втором член — const char*p)?
НЕ>Спасибо.
const TPointer pb(b);
Если TPointer объявлять как const, то и будут выполняться только константные методы.
А вообще задачу можно решить на шаблонах
template < typename T >
class TPointer
{
T *p;
public:
TPointer(T *p) : p(p);
void oper1();
void oper2() const;
};
template < typename T >
class TPointer< T const >
{
T const *p;
public:
TPointer( T const *p) : p(p);
void oper2() const;
};
char *a;
const char *b;
TPointer< char > pa(a);
TPointer< char const > pb(b);
Здравствуйте, Непомнящий Евгений, Вы писали:
НЕ>Хочется иметь возможность создавать такую обертку и над указателями на константу и над обычными указателями (над первыми соответственно можно выполнять только oper1, над вторыми — и oper1 и oper2).
Чем не устраивают внешние функции, обязательно нужен класс?
void operationOnPointerToNonConstant( char* p );
void operationOnPointerToConstant( const char* p );
char* p;
const char* pc;
operationOnPointerToNonConstant( p ); // ok
operationOnPointerToNonConstant( pc ); // oops
operationOnPointerToConstant( p ); // ok
operationOnPointerToConstant( pc ); // ok
Или нужен другой эффект?
Здравствуйте, Константин, Вы писали:
К>Чем не устраивают внешние функции, обязательно нужен класс?
К>К>void operationOnPointerToNonConstant( char* p );
К>void operationOnPointerToConstant( const char* p );
К>char* p;
К>const char* pc;
К>operationOnPointerToNonConstant( p ); // ok
К>operationOnPointerToNonConstant( pc ); // oops
К>operationOnPointerToConstant( p ); // ok
К>operationOnPointerToConstant( pc ); // ok
К>
К>Или нужен другой эффект?
Код я просто для примера привел. В классе помимо указателя есть еще и другие члены.
Ну и операторы перегружать для него хочется.