Raj*_*esh 6 c++ lambda std-function generic-lambda c++14
当泛型 lambda 被存储为 a 时std::function
,我们需要提供一个具体的类型,比如,
std::function<double(double)>
Run Code Online (Sandbox Code Playgroud)
因此绑定到特定类型,
以下声明:
std::function<auto(auto)>
Run Code Online (Sandbox Code Playgroud)
引发编译器错误。
我知道,从 c++14 开始,auto
可用于存储 lambda 的返回值,但是在将 lambda 存储在std::function
.
你不能。即使是定制的也没有std::function
。这是类型擦除的基本限制。
直观上,模板需要函数调用时可用的类型信息,但类型擦除会std::function
破坏该信息。
在更详细的层面上,类型擦除的工作原理是在编译时以与类型无关的方式存储操作集,或者通过虚拟函数隐式存储,或者通过函数指针显式存储。模板实际上是无限的操作族,因此不可能被存储。
如果您知道将使用的固定函数签名集,则可以编写自定义的std::function
.
归档时间: |
|
查看次数: |
992 次 |
最近记录: |