Re[19]: Concept-Based Polymorphism
От: B0FEE664  
Дата: 19.07.20 16:02
Оценка:
Здравствуйте, so5team, Вы писали:

BFE>>А вообще интересно: вот если в C++ добавить шаблонный виртуальный метод (что не сложно сделать вручную), то какой тип будет у такого полиморфизма в вашей классификации?

S>Я не представляю себе, что вы вкладываете в понятие "шаблонный виртуальный метод".

Я в вкладываю в это понятие ровно то, что оно подразумевает, а именно: шаблонный метод, который можно переопределить в производном классе и при этом этот переопределённый метод может быть вызван через указатель на базовый класс.
Т.е. виртуальный метод класса являющийся одновременно с этим шаблонным методом.
Например:
class A
{
  public:
   template<class T>
   virtual void method(T t)
   {
     ... 
   }
};


class B : public A
{
  public:
   template<class T>
   virtual void method(T t)
   {
     ... 
   }
};


class C : public A
{
  public:
   template<class T>
   virtual void method(T t)
   {
     ... 
   }
};

....

    A* arr[] = {new A, new B, new C, new D, new E};

    std::string str("asdf");

    for(A* p : arr)
    {
        p->method(1);
        p->method('c');
        p->method(1.1f);
        p->method(str);
        p->method("any other type");
    }


При выполнении этого кода должны вызыватся функции того класса в которое они переопределены ( overrided ).
К сожалению C++ не поддерживает (пока) такой синтаксис и поэтому реализацию приходится прописывать руками.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.