Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* OUTPUT
- Trying to avoid this: http://pastebin.com/08ySYBrT
- Using this solution: http://stackoverflow.com/a/17218370/286094
- ---- Rendering ImageView ----
- View::Renderer
- ImageView::Renderer
- ---- Rendering Sprite ----
- View::Renderer
- ImageView::Renderer
- Sprite::Renderer
- ---- Rendering AwesomeSprite ----
- View::Renderer
- ImageView::Renderer
- Sprite::Renderer
- AwesomeSprite::Renderer
- */
- #include <string>
- #include <iostream>
- using namespace std;
- class View{
- public:
- void Render(){
- render();
- }
- protected:
- class Renderer{
- public:
- Renderer(const View &v){
- cout << "View::Renderer" << endl;
- }
- };
- private:
- virtual void render() = 0;
- };
- class ImageView : public View{
- protected:
- class Renderer : public View::Renderer{
- public:
- Renderer(const View &v) : View::Renderer(v){
- cout << "ImageView::Renderer" << endl;
- }
- };
- private:
- virtual void render(){
- (Renderer(*this));
- }
- };
- class Sprite : public ImageView{
- protected:
- class Renderer : public ImageView::Renderer{
- public:
- Renderer(const View &v) : ImageView::Renderer(v){
- cout << "Sprite::Renderer" << endl;
- }
- };
- private:
- virtual void render(){
- (Renderer(*this));
- }
- };
- class AwesomeSprite : public Sprite{
- protected:
- class Renderer : public Sprite::Renderer{
- public:
- Renderer(const View &v) : Sprite::Renderer(v){
- cout << "AwesomeSprite::Renderer" << endl;
- }
- };
- private:
- virtual void render(){
- (Renderer(*this));
- }
- };
- void Draw(View *v){
- v->Render();
- }
- int main(){
- cout << "---- Rendering ImageView ----" << endl;
- ImageView *img = new ImageView;
- Draw(img);
- delete img;
- cout << endl;
- cout << "---- Rendering Sprite ----" << endl;
- Sprite *s = new Sprite;
- Draw(s);
- delete s;
- cout << endl;
- cout << "---- Rendering AwesomeSprite ----" << endl;
- AwesomeSprite *as = new AwesomeSprite;
- Draw(as);
- delete as;
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement