#include <iostream>
template <typename T>
class Base { // это должен быть абстрактный класс
public:
// Base();
virtual int foo(T x) = 0; // - пробовал вот так не получается
};
class A : public Base<int> {
public:
int foo(int x) {
std::cout << "A::foo()\n";
return 1;
}
};
class B : public Base<float> {
public:
int foo(float x) {
std::cout << "B::foo()\n";
return 2;
}
};
template <typename T>
int func(Base<T> *a, T value) {
return a->foo(value); // <- вот тут надо вызвать
}
int main() {
func(new A(), 10);
func(new B(), 10.1f);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIEJhc2UgeyAvLyDRjdGC0L4g0LTQvtC70LbQtdC9INCx0YvRgtGMINCw0LHRgdGC0YDQsNC60YLQvdGL0Lkg0LrQu9Cw0YHRgQpwdWJsaWM6Ci8vICAgIEJhc2UoKTsKICAgIHZpcnR1YWwgaW50IGZvbyhUIHgpID0gMDsgLy8gLSDQv9GA0L7QsdC+0LLQsNC7INCy0L7RgiDRgtCw0Log0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjwp9OwogCmNsYXNzIEEgOiBwdWJsaWMgQmFzZTxpbnQ+IHsKcHVibGljOgogICAgaW50IGZvbyhpbnQgeCkgewogICAgCXN0ZDo6Y291dCA8PCAiQTo6Zm9vKClcbiI7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9Cn07CiAKY2xhc3MgQiA6IHB1YmxpYyBCYXNlPGZsb2F0PiB7CnB1YmxpYzoKICAgIGludCBmb28oZmxvYXQgeCkgewogICAgCXN0ZDo6Y291dCA8PCAiQjo6Zm9vKClcbiI7CiAgICAgICAgcmV0dXJuIDI7CiAgICB9Cn07CiAKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmludCBmdW5jKEJhc2U8VD4gKmEsIFQgdmFsdWUpIHsKICAgIHJldHVybiBhLT5mb28odmFsdWUpOyAvLyA8LSDQstC+0YIg0YLRg9GCINC90LDQtNC+INCy0YvQt9Cy0LDRgtGMCn0KIAppbnQgbWFpbigpIHsKICAgIGZ1bmMobmV3IEEoKSwgMTApOwogICAgZnVuYyhuZXcgQigpLCAxMC4xZik7CiAKICAgIHJldHVybiAwOwp9