Re[6]: const в D, требуется помощь клуба.
От: Kluev  
Дата: 09.07.05 10:53
Оценка: 1 (1) +1
VD>В С# доступна инкапсуляция которая позволяет создать immutability-объекты. Отальное от лукавого.
VD>Главное, что этого достаточно для создания immutability-классов решающих поставленную проблему.

Нифига это не решает проблеммы.
Вот пример на С++ из реальной жизни


struct KnotVector
{
   double knot_at( int idx ) const;
   void   resize( int p, int n ); 
};

struct PointVector
{
    const HPoint& point_at( int idx ) const;
    void resize( int n );
};

// а теперь внимание сюда:
class NurbsCurve
{
   KnotVector  m_U;
   PointVector m_Pw;
public:
   const KnotVector&  U() const { return m_U; }
   const PointVector& Pw() const { return m_Pw; }

// вот здесь:
   void resize( int p, int n )
   {
      m_U.resize(p,n);
      m_Pw.resize(n);
   }
};


Классы KnotVector и PointVector могут юзатся пользователем сами по себе или как агреггаты в других классах NurbsCurve, NurbsSurface и т.п. Причем когда они юзаются как часть агрегата естественно что модификация возможна только классом владельцем.

Если бы не было const то пришлось бы копировать read-only интерфейс KnotVector и PointVector в каждый из классов:


class NurbsSurface
{
   KnotVector m_U, m_V;
public:
   double u_knot_at(int idx);
   double v_knot_at(int idx);
// и еще тридцать методов 
};


А const позволяет все закрыть и грамотно все спроектировать. Конечно щас кое кто возразит что можно заюзать const_cast? но это уже не мои проблеммы. Почему бы сразу не заюзать format c:?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.