Пример использования лямбда-функции как значения поля класса — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Ulysses (обсуждение | вклад) (Новая страница: «<source lang="cpp">#include <functional> #include <iostream> using std::cout; using std::endl; class Bar { public: void f(int n) { cout << "Bar::f(" << n << ")…») |
Ulysses (обсуждение | вклад) |
||
Строка 23: | Строка 23: | ||
void setF() { | void setF() { | ||
− | alloc = [=](int N){ this->b.f(N); }; // функция от одного int-аргумента N | + | alloc = [=](int N){ this->b.f(N); }; // лямбда-функция (то есть безымянная функция) от одного int-аргумента N |
+ | // вызывает b.f(N) | ||
} | } | ||
void setG() { | void setG() { | ||
− | alloc = [=](int N){ this->b.g(N); }; | + | alloc = [=](int N){ this->b.g(N); }; |
} | } | ||
}; | }; |
Версия 11:02, 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 main()
{
Foo f;
f.alloc(42); // >>> Bar::f(42)
f.setG();
f.alloc(43); // >>> Bar::g(43)
}