Обертка над указателем на константу
От: Непомнящий Евгений  
Дата: 04.07.08 13:03
Оценка:
Здравствуйте!

Есть обертка над указателем:
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>>
Re: Обертка над указателем на константу
От: Were  
Дата: 04.07.08 13:54
Оценка: 1 (1)
Здравствуйте, Непомнящий Евгений, Вы писали:

НЕ>Здравствуйте!


НЕ>Как это можно сделать?

НЕ>Или просто создать два класса — 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);
Re: Обертка над указателем на константу
От: Константин Россия  
Дата: 04.07.08 15:55
Оценка:
Здравствуйте, Непомнящий Евгений, Вы писали:

НЕ>Хочется иметь возможность создавать такую обертку и над указателями на константу и над обычными указателями (над первыми соответственно можно выполнять только 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

Или нужен другой эффект?
Re[2]: Обертка над указателем на константу
От: Аноним  
Дата: 06.07.08 13:41
Оценка:
Здравствуйте, Константин, Вы писали:
К>Чем не устраивают внешние функции, обязательно нужен класс?
К>
К>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
К>

К>Или нужен другой эффект?

Код я просто для примера привел. В классе помимо указателя есть еще и другие члены.
Ну и операторы перегружать для него хочется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.