Здравствуйте, 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++ не поддерживает (пока) такой синтаксис и поэтому реализацию приходится прописывать руками.