перегрузка виртуального оператора -> ()

Это всего лишь код эксперимента.

struct B
{
  virtual B* operator -> () { return this; }
  void foo () {} // edit: intentionally NOT virtual
};

struct D : B
{
  virtual D* operator -> () { return this; }
  void foo () {}
};

int main ()
{
  B &pB = *new D;
  pB->foo();  // calls B::foo() !
}

Я знаю, что оператор должен вызываться с использованием объекта или ссылки; таким образом, в приведенном выше случае ссылка pB по-прежнему является решительной для объекта B ? Хотя это будет непрактично, но из любопытства, есть ли способ вызвать D :: operator -> через pB ?

9
задан iammilind 5 June 2011 в 04:06
поделиться