можно изменить тип возвращаемого значения при переопределении виртуальной функции в C ++?

Я сталкиваюсь с проблемой переопределения виртуальных функций, на самом деле, речь идет о 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());  
       }  

   };  

, но я не могу написать функцию виртуального значения из-за того, что возвращаемое значение не может быть отменено.

есть ли хорошее решение этой проблемы?

Спасибо

7
задан camino 19 November 2010 в 05:19
поделиться