We can actually create an object while we really need it.
By passing this "pseudo" object around(i.e a lambda object), or, give a series of 'states' and apply to the object while we need to reap the result.
Quite useful for distributed computing.
online compiled src
#include <iostream>
using namespace std;
class Type1 {
int meaing_of_life_;
int world_;
public:
Type1() = default;
explicit Type1(int mol, int world) : meaing_of_life_(mol), world_(world) {}
int get_world(){ return world_;}
int get_mol(){ return meaing_of_life_;}
};
auto get_world= [](auto&& object) {
return [&object] (...) {
return [&object]() {
return object;
};
};
};
auto get_mol = [](...) {
return [](auto&& object) {
return [&object]{
return object;
};
};
};
/*
* create a object of type T
*/
auto make_object = [](auto type, auto&&... args) {
return [args...](auto&& getter){
decltype(type) obj{args...};
return getter(obj.get_world())(obj.get_mol())();
};
};
int main()
{
auto object = make_object(Type1{}, 2015, 42);
cout << object(get_world) << endl;
cout << object(get_mol) << endl;
}
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.