- 论坛徽章:
- 0
|
请教,关于lambda函数的实现问题
在C++11之前,boost库已经实现了lambda函数的语法,如下面这个例子:
- #include <iostream>
- #include "boost/lambda/lambda.hpp"
- #include "boost/function.hpp"
- int main() {
- using namespace boost::lambda;
- (std::cout << _1 << " " << _3 << " " << _2 << "!\n")
- ("Hello","friend","my");
- boost::function<void(int,int,int)> f=
- std::cout << _1 << "*" << _2 << "+" << _3
- << "=" <<_1*_2+_3 << "\n";
- f(1,2,3);
- f(3,2,1);
- }
复制代码 我的问题是,boost库似乎重载了()操作符,以至于可以把代码写成:
(std::cout << _1 << " " << _3 << " " << _2 << "!\n")
("Hello","friend","my");
这里的实现机制到底是怎么样的? 我看源代码看不出这里的lambda是如何实现把std之前的左括号(和"!\n"之后的右括号变成lambda函数的声明?
这太神奇了,其中的原理是什么呢?
|
|