Comments (1)
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 = ▭
return p;
}
int main() {
auto obj = CreateRectangleAsDrawable(2,2);
std::cout << PrintDrawableToString(std::move(obj)) << std::endl;
}
from proxy.
Related Issues (20)
- Update README.md to reflect the new syntax to build a facade
- About function is_consteval HOT 6
- Add support for `operator->*`
- Simplify syntax of helper macros
- Add support for renaming a member function
- Implement more samples
- Add support for fuzz test
- Add support for pointer casting
- inherit member variable using proxy HOT 3
- Compilation error in Linux (centos8, gcc10.5) HOT 1
- Where is document? HOT 3
- A class cannot have a constructor with parameters? HOT 1
- Calling a polymorphic function with a rvalue-reference convention shall be destructive
- Having two or more indirect conventions will make `proxy` 8 bytes larger than expected in MSVC
- Provide c++20 module interface HOT 1
- `facade_builder::restrict_layout` may make the resulting facade ill-formed
- Poor performance? Slower than vtable? HOT 4
- Is it possible to implement template classes inherit from facade_builder with proxy? HOT 1
- Error: call to member function 'Area' is ambiguous when try to add_convention Area function with different return type. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from proxy.