teplate<class T> operator T () <--> 2
От: Eugene-32  
Дата: 21.08.02 08:15
Оценка: 10 (1)
Привет всем программистам и им сочуствующим.
Я тут сам кое что протестировал на таком примере.

class C1
{
public:
   C1(): m_Int(100),m_Char("OK")
   {
   }
   virtual ~C1()
   {
   }      
   template<class T> operator T ()
   {
      T* res=NULL;
      if(typeid(T)==typeid(int))
         res=(T*)&m_Int;
      else
      if(typeid(T)==typeid(char*))
         res=(T*)&m_Char;
      if(res==NULL) throw "Error type cast";
      return *res; 
   }    
protected:
   int m_Int;
   char* m_Char;
};
 
class C2
{
public:
   C2()
   {
      C1 c1;
      int r=c1;
      char* d1=c1;
      try
      {
         double g=c1;
      }
      catch(char* err)
      {
         ::MessageBox(NULL,err,"ERROR!",0);
      }
   }
   ~C2()
   {
   }
} c2;


и, вот какие резульраты я получил:
/ RTTI была во всех тестах была включена /

--VC6--
Компилятор пропустил эту конструкцию, но при выполнении кода дебагер не заходит в тело оператора и, валится с ошибкой.

--VC7--
Компилятор не пропускает такой код вообще.

--C++Builder 5--
Тут, как ни странно, все работает корректно !!?

p/s
С точки зрения синтаксиса C++ тут все правильно -- все дело в реализации !
Спасибо всем, кто пытался ответить на этот вопрос.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.