Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class T {
- public:
- double execute();
- };
- T t;
- int a = 0, b = 1;
- t.execute([a,b]()->double{return (3*a + 5*b);});
- class T {
- public:
- double execute(double (*expression)()) {
- return expression();
- }
- };
- int main() {
- T t;
- double result = t.execute([]() -> double {return 1 + 1;});
- return 0;
- }
- class T {
- public:
- template<typename Func>
- double execute(Func expression) {
- return expression();
- }
- };
- int main() {
- T t;
- int a = 0, b = 1;
- double result = t.execute([&a,&b]() -> double {return 3 * a + 5 * b;});
- return 0;
- }
- class T {
- public:
- double execute(std::function<double()> expression) {
- // sem templates, expression pode ser "armazenada" em qualquer lugar
- return expression();
- }
- };
- int main() {
- T t;
- int a = 0, b = 1;
- // [&] captura qualquer variavel por referencia
- std::function<double()> func = [&]() -> double {return 3 * a + 5 * b;};
- double result = t.execute(func);
- return 0;
- }
- class T {
- private:
- double (*expression)();
- public:
- T(double (*exp)()) : expression(exp) {}
- double execute() {
- return this->expression();
- }
- };
- int main() {
- T t([]()->double {return 1+1;});
- double val = t.execute(); // val = 2
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement