Здравствуйте, Eldar9x, Вы писали:
E>Каким образом привести указатель к типу B*?
При желании извращаться бесконечно, можно извратиться довольно продвинутым способом.
Я так понимаю, что у тебя есть два метода, работающих с одиними и теми же данными. И тебе хочется так менять указатель, чтобы переключать какой из методов позавётся?
Я тогда немного переформулирую задачу:
class MyRealClass {
// Тут данные и методы, в том числе
void Method1();
void Method2();
};
Теперь заводим интерфейс, через который мы планируем иметь доступ к нашему объекту:
struct IMyMethod {
virtual ~IMyMethod() {};
virtual void Method() = 0;
};
И заводим две его реализации:
struct MyMethod1 : IMyMethod, virtual MyRealClass {
void Method() { Method1(); }
IMyMethod* GetMethod1() { return this; }
};
struct MyMethod2 : IMyMethod, virtual MyRealClass {
void Method() { Method2(); }
IMyMethod* GetMethod2() { return this; }
};
Ну и теперь рожаем "переключаемый" объект
struct MyClass : MyMethod1, MyMethod2 {
};
Ну, или, чуть удобнее:
class MyRealClass {
// Тут данные и методы, в том числе
void Method1();
void Method2();
};
struct IMyMethod {
virtual ~IMyMethod() {}
virtual void Method() = 0;
virtual IMyMethod* GetMethod1() = 0;
virtual IMyMethod* GetMethod2() = 0;
};
struct MyMethod1 : IMyMethod, virtual MyRealClass {
virtual void Method() { Method1(); }
};
struct MyMethod2 : IMyMethod, virtual MyRealClass {
virtual void Method() { Method2(); }
};
struct MyClass : MyMethod1, MyMethod2 {
virtual IMyMethod* GetMethod1() { return static_cast<MyMethod1*>( this ); }
virtual IMyMethod* GetMethod2() { return static_cast<MyMethod2*>( this ); }
};
Ну и используем:
IMyMethod* p = ( new MyClass )->GetMethod1();
p->Method(); // Method1
p = p->GetMethod2();
p->Method(); // Method2
delete p; // Всё хорошо, ничего не утекает :)
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском