Russian Qt Forum
Май 19, 2024, 03:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ООП, CRTP  (Прочитано 2031 раз)
CuteBunny
Гость
« : Май 31, 2013, 14:20 »

Добра всем!

Уже второй раз натыкаюсь на странную вещь, которую не знал никогда и никогда не использовал, пример:
Код
C++ (Qt)
// The Curiously Recurring Template Pattern (CRTP)
template<class Derived>
class Base
{
   // methods within Base can use template to access members of Derived
};
class Derived : public Base<Derived>
{
   // ...
};
 
На форуме уже упоминался CRTP, но я до сих пор не понимаю суть этой "технологии"?
В частности в вики написано, что одна из целей CRTP - избавиться от виртуальных методов.
В коде встречал места, где используется CRTP с виртуальными методами, пример:
Код
C++ (Qt)
#include <iostream>
#include <memory>
 
class abstract
{
public:
 
   virtual ~abstract() {}
 
   virtual void hello() = 0;
};
 
template <class T>
class base : public abstract
{
public:
 
   virtual void hello()
   {
       static_cast<T*>(this)->do_hello();
   }
 
private:
 
   void do_hello()
   {
       std::cout << "base::hello()" << std::endl;
   }
};
 
class left : public base<left>
{
public:
 
   void do_hello()
   {
       std::cout << "left::hello()" << std::endl;
   }
};
 
class right : public base<right>
{
 
};
 
int main()
{
   typedef std::auto_ptr<abstract> abstract_ptr;
 
   abstract_ptr a1(new left);
   abstract_ptr a2(new right);
 
   a1->hello();
   a2->hello();
 
   return 0;
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.077 секунд. Запросов: 17.