Пример использования лямбда-функции как значения поля класса — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Новая страница: «<source lang="cpp">#include <functional> #include <iostream> using std::cout; using std::endl; class Bar { public: void f(int n) { cout << "Bar::f(" << n << ")…»)
(нет различий)

Версия 10:47, 3 декабря 2014

#include <functional>
#include <iostream>

using std::cout;
using std::endl;

class Bar {
public:
	void f(int n) { cout << "Bar::f(" << n << ")" << endl; }

	void g(int n) { cout << "Bar::g(" << n << ")" << endl; }
};

class Foo {

	Bar b;

public:
	Foo() { setF(); }

        // функциональное поле: будет хранить функцию от одного аргумент int и возвращать void 
	std::function<void(int)> alloc; 

	void setF() { 
		alloc = [=](int N){ this->b.f(N); }; // функция от одного int-аргумента N, которая вызывает b.f(N)
	}

	void setG() { 
		alloc = [=](int N){ this->b.g(N); }; // функция от одного int-аргумента N, которая вызывает b.g(N)
	}
};

int main()
{
	Foo f;
	f.alloc(42); // >>> Bar::f(42)
	f.setG();
	f.alloc(43); // >>> Bar::g(43)
}