私の問題は、より長い継承チェーンでこの問題を拡張します
これは私のコードです:
////////// View ///////////////
class View{
public:
void Render(){
std::cout << "View::Render" << std::endl;
render();
}
protected:
virtual void render() = 0;
};
////////// ImageView ///////////////
class ImageView : public View{
public:
protected:
void render(){
std::cout << "ImageView:render" << std::endl;
}
};
////////// Sprite ///////////////
class Sprite : public ImageView{
public:
protected:
void render(){
std::cout << "Sprite:render" << std::endl;
}
};
////////// Utility ///////////////
void Draw(View *vw){
vw->Render();
}
////////// main ///////////////
int main(){
std::cout << "... Draw ImageView ..." << std::endl;
ImageView *imgvw = new ImageView;
Draw(imgvw);
delete imgvw;
std::cout << "... Draw Sprite ..." << std::endl;
Sprite *sp = new Sprite;
Draw(sp);
delete sp;
return 0;
}
実際の出力:
.. Draw ImageView ...
View::Render
ImageView:render
... Draw Sprite ...
View::Render
Sprite:render
必要な出力:
.. Draw ImageView ...
View::Render
ImageView:render
... Draw Sprite ...
View::Render
ImageView:render
Sprite:render
すべての仮想メソッド チェーンを呼び出す必要がある基本クラスのパブリック メソッドを 1 つだけ保持しようとしています。C++でこのようなことは可能ですか?