繁体   English   中英

(c ++)在boost multi_array中存储lambda函数

[英](c++) Storing lambda function in a boost multi_array

我的计划是在boost库的多维数组multi_array中存储数百(甚至数千)个(插值)函数。 我需要存储它们,因为我需要在项目的不同点调用它们,不同的数字作为参数。 (我使用linterp库http://rncarpio.github.io/linterp/来创建插值函数)。

我可以将函数存储在矢量中,如下所示:

// creating the vector, storing the function
std::vector< std::function< double(double *x) > > interp_list(4);
// storing the function in the vector
interp_list[0] = ( [&] (double *x) { return interp1.interp(x); }  );

但是,对多维数组执行相同操作始终会导致编译错误:

// creating the array, I want to store the functions in
boost::multi_array< std::function<double (std::vector<double>::iterator)>, 2> interp2_list[2][2];
// storing the function in the vector
interp2_list[0][0] = ( [&] (std::vector<double>::iterator x) { return interp1.interp(x); }  );

我对函数至少有“7维”(例如interp_list [6] [2] [3] [3] [64] [12] [2]),因此喜欢循环它。

编辑1.0:添加错误消息:

在/usr/include/boost/multi_array.hpp:26:0中包含的文件中,来自./StoreInterp.cpp:16:/usr/include/boost/multi_array/multi_array_ref.hpp:在Instanziierung von»boost :: multi_array_ref&boost :: multi_array_ref :: op erator =(const ConstMultiArray&)[with ConstMultiArray = main():::: iterator)>; T = std :: function>)>; long unsigned int NumDims = 2ul]«:/usr/include/boost/multi_array.hpp:371:26:erfordert durch»boost :: multi_array&boost :: multi_array :: o perator =(const ConstMultiArray&)[with ConstMultiArray = main( )::::迭代)>; T = std :: function>)>; long unsigned int NumDims = 2ul; Allocator = std :: allocator>)>>]«./StoreInterp.cpp:108:22:von hier erfordert /usr/include/boost/multi_array/multi_array_ref.hpp:482:30:Fehler:»const struct main() :::: iterator)>«没有名为的成员»num_dimensions«BOOST_ASSERT(other.num_dimensions()== this-> num_dimensions());

你的interp2_list声明是错误的,你声明了一个2维数组的boost::multi_array<> 2维度,所以你得到一个4-D“事物”,其中第2维度为2,但最后一个维度没有两个维度。

你真正想要的是用正确的尺寸初始化的单个boost::multi_array<>

boost::multi_array< std::function<double (std::vector<double>::iterator)>, 2> 
    interp2_list(boost::extents[2][2]);

请参阅增强文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM