...
Code Block | ||
---|---|---|
| ||
#include <iostream> using namespace std; auto isEqual = [](auto &pp)->bool {return pp.getX() == pp.getY(); }; int main() { int x = 5; auto isEmpty = [x](auto val)->auto { std::cout << x << ", " << val << std::endl; return val; }; cout << isEmpty(true) << endl; } |
A lambda cannot be declared as a member variable
Code Block | ||
---|---|---|
| ||
#include <iostream>
using namespace std;
class Point
{
public:
Point(int px, int py) :x(px), y(py) {}
const int& getX() const { return x; }
const int& getY() const { return y; }
private:
int x;
int y;
auto isEqual = [](auto &pp)->bool {return pp.getX() == pp.getY(); }; // This line will NOT compile
};
int main()
{
int x = 5;
auto isEmpty = [x](auto val)->auto { std::cout << x << ", " << val << std::endl; return val; };
cout << isEmpty(true) << endl;
Point np{ 4, 7 };
} |
Lambdas can be returned from methods
Code Block | ||
---|---|---|
| ||
#include <iostream>
using namespace std;
class Point
{
public:
Point(int px, int py) :x(px), y(py) {}
const int& getX() const { return x; }
const int& getY() const { return y; }
auto buildFunctor()
{
return [this]()->bool {return this->getX() == this->getY(); };
}
private:
int x;
int y;
};
auto isEqual = [](auto &pp)->bool {return pp.getX() == pp.getY(); };
int main()
{
int x = 5;
auto isEmpty = [x](auto val)->auto { std::cout << x << ", " << val << std::endl; return val; };
cout << isEmpty(true) << endl;
Point np{ 4, 7 };
auto result = isEqual(np);
cout << result << endl;
auto lf = np.buildFunctor();
cout << lf() << endl;
} |