Помогите с реализацией полиморфизма; то ли я плохо читал Страуструпа, то ли я много хочу, но ответа на свой вопрос найти не смог. Мне необходимо, что бы функция f() сама определяла наследника и вызывала соответствующий метод. Как это реализовать, подскажите, пожалуйста?
Спасибо.
================================================
#include <iostream>
#include <string>
using namespace std;
// Базовый класс
class Parent
{
public:
void set();
};
class ChildA : public Parent
{
private:
int data;
public:
void set(const int& tdata) { data = tdata; }
};
class ChildB : public Parent
{
private:
string data;
public:
void set(const string& tdata) { data = tdata; }
};
/*
В зависимости от ``data'' f() должна вызывать соответсвующий метод наследника, например, при f(ChildB o, 10) должен вызываться Q.set(int).
*/
template<class T> void f(Parent& Q, T data)
{
Q.set(data);
}
int main(void)
{
ChildA a;
ChildB b;
f(a, 10);
// f(b, "fff");
return 0;
}
================================================