处理 Valarray
Posted
技术标签:
【中文标题】处理 Valarray【英文标题】:Processing Valarrays 【发布时间】:2020-05-11 21:44:15 【问题描述】:提前感谢您的关注。
所以我正在处理来自 STL 的 valarray,我对使用闭包捕获值感到好奇。
为什么我不能通过引用传递值。以下面的代码为例:
#include <iostream>
#include <valarray>
#include <functional>
int main()
std::valarray<int>arr=1,2;
std::valarray<int>arr2;
arr2=arr.apply([](int a)return a+=2;);
/* arr2=arr.apply([&](int a)return a+=2;);
error: no matching for call to std::valarray<int>::apply(main()::<lambda(int)> */
for(int x: arr2)
std::cout<<x;
return 0;
谢谢!
【问题讨论】:
【参考方案1】:与几乎所有其他采用谓词或其他可调用对象形式的标准库函数不同,std::valarray<T>::apply
函数实际上只接受一个指向函数的实际指针,而不使用模板来接受任何可调用对象。
无捕获的 lambda 可以转换为指向函数的指针,就像 apply
函数需要的那样。但是如果你在你的 lambda 中使用捕获,那就不可能了。
【讨论】:
以上是关于处理 Valarray的主要内容,如果未能解决你的问题,请参考以下文章