Advertisement
Guest User

Untitled

a guest
Mar 30th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.68 KB | None | 0 0
  1. struct IClonable
  2. {
  3.   virtual IClonable* clone() = 0;
  4. };
  5.  
  6. struct A : IClonable
  7. {
  8.   IClonable* clone() { return new A(*this); }
  9. };
  10.  
  11. struct B
  12. {
  13.   virtual ~B() {};
  14. };
  15.  
  16. int main()
  17. {
  18.   A a;
  19.   B b;
  20.   IClonable *c;
  21.   IClonable *c_cloned;
  22.   // проверка в рантайме
  23.   if (c = dynamic_cast<IClonable*>(&a))
  24.     // сюда зайдет
  25.     c_cloned = c->clone();
  26.   if (c = dynamic_cast<IClonable*>(&b))
  27.     // а сюда - нет
  28.     c_cloned = c->clone();
  29.   // но в подовляющем большинстве случаем нужна проверка на статике всего лишь
  30.   c = &a;
  31.   c_cloned = c->clone();
  32.   //c_cloned = &b;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement