【发布时间】:2013-02-18 12:39:13
【问题描述】:
您知道,我们可以将 lambda 函数包装或存储到 std::function:
#include <iostream>
#include <functional>
int main()
{
std::function<float (float, float)> add = [](float a, float b)
// ^^^^^^^^^^^^^^^^^^^^
{
return a + b;
};
std::cout << add(1, 2) << std::endl;
}
我的问题是关于std::function,您可以看到它是一个模板类,但它可以接受任何类型的函数签名。
例如float (float, float) 这种形式的return_value (first_arg, second_arg)。
std::function 的结构是什么,它如何接受像x(y,z) 这样的函数签名,以及它如何与它一起工作? float (float, float) 是 C++ 中新的有效表达式吗?
【问题讨论】:
-
在 C++ 中查找类型擦除。
-
您可以随时打开编译器的
<function>标头(我相信所有主要编译器都将标准标头作为 C++ 代码提供)并检查它,或者查看 Boost.Function。 -
@Angew:是的,很有教育意义,+1。我认为
std::function几乎涉及 C++ 语言的各个方面... -
为了更轻松地进行心理锻炼,请尝试了解
std::bind的工作原理... -
您可以在stackoverflow.com/a/14741161/1762344查看实施情况