gpt4 book ai didi

c++ - 使用 Boost.Fusion 函数列表

转载 作者:行者123 更新时间:2023-11-30 04:35:17 27 4
gpt4 key购买 nike

我正在尝试将函数对象列表应用于以下代码中的某个值。但是这段代码导致错误
boost_1_44\boost\fusion\algorithm\iteration\detail\for_each.hpp(82): 错误 C2064:

如何将函数对象列表应用于某个值?

double doublef2(double x,double y){return 2*x+y; }
double doublef3(double x,double y){return 3*x*y; }
double doublef4(double x,double y){return 4+x*y; }
main(){
boost::fusion::vector<
boost::function<double (double,double)>,
boost::function<double (double,double)>,
boost::function<double (double,double)>
> tt;


boost::fusion::at_c<0>(tt)= & doublef2;
boost::fusion::at_c<1>(tt)= & doublef3;
boost::fusion::at_c<2>(tt)= & doublef4;

boost::fusion::for_each(tt, std::cout << boost::lambda::_1(10,100) << '\n');

}

最佳答案

您的问题与 boost.fusion 完全无关。相反,您的问题是由尝试从 boost.lambda 仿函数调用非惰性仿函数(不使用 bind)引起的。将 boost::fusion::for_each 与适当的仿函数而不是 boost.lambda 仿函数一起使用可以得到您期望的结果:

#include <iostream>
#include <boost/function.hpp>
#include <boost/fusion/include/at_c.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/include/for_each.hpp>

double doublef2(double x, double y) { return 2. * x + y; }
double doublef3(double x, double y) { return 3. * x * y; }
double doublef4(double x, double y) { return 4. + x * y; }

struct proper_functor
{
typedef void result_type;

proper_functor(double x, double y) : x_(x), y_(y) { }

template<typename F>
void operator ()(F const& f) const { std::cout << f(x_, y_) << '\n'; }

private:
double x_, y_;
};

int main()
{
boost::fusion::vector<
boost::function<double (double, double)>,
boost::function<double (double, double)>,
boost::function<double (double, double)>
> tt;

boost::fusion::at_c<0>(tt) = doublef2;
boost::fusion::at_c<1>(tt) = doublef3;
boost::fusion::at_c<2>(tt) = doublef4;

boost::fusion::for_each(tt, proper_functor(10., 100.));
}

顺便说一句,在实际代码中遇到 boost.fusion 的这种用法会很奇怪; fusion 容器适用于同类类型,如果您使用所有相同类型,请使用 std::array/std::tr1::array/boost::array 而不是为自己节省一些编译时间。

关于c++ - 使用 Boost.Fusion 函数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5429722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com