Giter VIP home page Giter VIP logo

Comments (1)

MoFHeka avatar MoFHeka commented on July 28, 2024

Here is the sample

import std;

#include "proxy.h"

int Area_default() const {
  throw std::runtime_error("No Implemented"); 
}

// Specifications of abstraction
PRO_DEF_MEM_DISPATCH(MemDraw, Draw);
PRO_DEF_MEM_DISPATCH(MemArea, Area, Area, Area_default);

struct Drawable : pro::facade_builder
    ::add_convention<MemDraw, 
                    void(std::ostream& output, double custom_num),
                    void(std::ostream& output, int custom_num)>
    ::add_convention<MemArea, 
                    int() const>
    ::build {};

// Implementation
template<typename T>
class Rectangle {
 public:
  void Draw(std::ostream& out, T custom) const
      { out << "{Rectangle: width = " << width_ << ", height = " << height_ << " custom = " << custom <<"}"; }
  void SetWidth(T width) { width_ = width; }
  void SetHeight(T height) { height_ = height; }
  // T Area() const { return width_ * height_; }

 private:
  T width_;
  T height_;
};

// Client - Consumer
std::string PrintDrawableToString(pro::proxy<Drawable> p) {
  std::stringstream result;
  int custom_num = 10;
  result << "shape = ";
  p->Draw(result, custom_num);  // Polymorphic call
  result << ", area = " << p->Area();  // Polymorphic call
  return std::move(result).str();
}

// Client - Producer
pro::proxy<Drawable> CreateRectangleAsDrawable(int width, int height) {
  Rectangle<int> rect;
  rect.SetWidth(width);
  rect.SetHeight(height);
  pro::proxy<Drawable> p = &rect;
  return p;
}

int main() {
  auto obj = CreateRectangleAsDrawable(2,2);
  std::cout << PrintDrawableToString(std::move(obj)) << std::endl;
}

from proxy.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.