函数调用后的另一组括号 [C++]
Another set of parentheses after a function call [C++]
我在一本书中遇到过这个例子(以更通用的形式重写),但是,我很好奇的问题没有得到解释。
有效,我已经测试过了。
问.:
- 函数调用后的另一组括号是什么意思?
- 如何调用此 pattern/syntaxis 以阅读更多相关信息?
#include <iostream>
template <typename FUNCTION>
auto compose(FUNCTION&& f)
{
return [=](auto x){ return f(x);}; // where does the x come from?
}
int main() {
std:: cout << compose([](int const n) { return n*2; })(4); // How is 4 captured? What is (4) here?
}
这只是一些有趣的代码来说明我猜想的一点。
[](int const n) { return n*2; }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这段代码定义了一个匿名函数 (lambda)。它由编译器转换为类似于此的结构:
struct {
operator()(int const n) { return n*2; }
};
现在 compose()
接受这个结构并将其打包到另一个具有构造函数的类似结构中,并将上面的结构存储在一个成员变量中。
你最终调用了一个匿名结构 operator()(4)
。
我在一本书中遇到过这个例子(以更通用的形式重写),但是,我很好奇的问题没有得到解释。 有效,我已经测试过了。
问.:
- 函数调用后的另一组括号是什么意思?
- 如何调用此 pattern/syntaxis 以阅读更多相关信息?
#include <iostream>
template <typename FUNCTION>
auto compose(FUNCTION&& f)
{
return [=](auto x){ return f(x);}; // where does the x come from?
}
int main() {
std:: cout << compose([](int const n) { return n*2; })(4); // How is 4 captured? What is (4) here?
}
这只是一些有趣的代码来说明我猜想的一点。
[](int const n) { return n*2; } ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这段代码定义了一个匿名函数 (lambda)。它由编译器转换为类似于此的结构:
struct {
operator()(int const n) { return n*2; }
};
现在 compose()
接受这个结构并将其打包到另一个具有构造函数的类似结构中,并将上面的结构存储在一个成员变量中。
你最终调用了一个匿名结构 operator()(4)
。