Re[4]: Расширение С++
От: IAZ http://iaz.simb.ru
Дата: 24.03.03 15:41
Оценка: 18 (4)
Здравствуйте, Denwer, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


D>

А>>Т.е., хотелось бы иметь средства, которые позволят легко расширять (возможно, чужие) библиотеки (для своих нужд) причем, так, чтобы эти расширения и сами библиотеки можно было бы легко сопровождать, и, желательно, независимо друг от друга.

А>>Denwer, я правильно понял?


А>>--

А>>Дмитрий

D>ДА ДА ДА


Хороший способ расширения библиотеки классов — это использование оберток.
Например, пусть у нас есть библиотека классов:


class A
{
public:
   void f();
};
class B : public A
{
public:
   void g();
};



и ее требуется расширить одной фукцией void h()


template<class T>
class X
{
public:
   X(T* _a) : a(_a) {}
   void h();
   T* operator->()
   {
     return a;
   }
private:
   T* a;
};


Использовать такой класс-обертку не сложнее чем обычный класс:

X<A> xa(new A);
xa.h();  // вызов X::h()
xa->f(); // вызов A::f()

X<B> xb(new B);
xb.h();  // вызов X::h()
xb->f(); // вызов A::f()
xb->g(); // вызов B::g()



Конечно в этом случае надо знать, что к методам класса X надо обращаться через '.' а к другим через '->' Но неужели это проблема?!

Доступа к закрытым методам классов A & B тоже не получишь.
Зато дешево, надежно и практично.
Кто ищет то всегда найдет!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.