Я сталкиваюсь с проблемой переопределения виртуальных функций, на самом деле, речь идет о hessian (веб-сервис протокол).
у него есть базовый класс Object и некоторые производные классы: Long, Int, String, ..., все производные классы не имеют "значения" виртуальной функции
class Object
{
...
};
class Long :public Object
{
...
public:
typedef long long basic_type;
basic_type value(){return value_;}
private:
basic_type value_;
...
};
class Int :public Object
{
...
public:
typedef int basic_type;
basic_type value(){return value_;}
private:
basic_type value_;
...
};
теперь я хочу добавить функцию , скажем, toString, который может преобразовать Object в строку:
Object *obj = ...
cout<<obj->toString();
, если я могу изменить функцию значения на виртуальную, Мне нужно только написать функцию toString в Object, иначе мне нужно написать виртуальную функцию toString и переопределить эти функции во всех производных классах.
например
class Object
{
virtual Type value(); // It seemed that I can't write a function like this,because the Type is different for different derived classes
std::string toString()
{
some_convert_function(value());
}
};
, но я не могу написать функцию виртуального значения из-за того, что возвращаемое значение не может быть отменено.
есть ли хорошее решение этой проблемы?
Спасибо