gpt4 book ai didi

c++ - boost::phoenix 相当于什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:40 25 4
gpt4 key购买 nike

我有以下内容:

class Foo
{
public:
std::string const& Value() const { return /*Return some string*/; }
};

typedef std::list<Foo> FooList;
FooList foos; // Assume it has some valid entities inside

std::vector<int> ints;

FooList::const_iterator it, iend = foos.end();
for (it = foos.begin(); it != iend; ++it)
{
ints.push_back(boost::lexical_cast<int>(it->Value()));
}

如何使用 std::for_eachboost::phoenix 实现 for 循环?我尝试了几种方法,但它变得非常丑陋(我有大量嵌套的 bind() 语句)。我基本上只是想看看 boost phoenix 如何使这个 for 循环变得清晰和可读,所以我没有编写太多样板代码来迭代具有 1-2 行专用逻辑的容器。

有时,在 C++11 之前执行 lambda 似乎太难读且难以维护,不值得这么麻烦。

最佳答案

假设您准备了一个 Phoenix 友好的函数对象:

namespace lexical_casts
{
template <typename T> struct to_
{
template <typename/*V*/> struct result { typedef T type; };
template <typename V>
T operator()(V const& v) const { return boost::lexical_cast<T>(v); }
};

boost::phoenix::function<to_<int> > to_int;
}

你可以这样写:

BOOST_AUTO(value_of, phx::lambda[ phx::bind(&Foo::Value, arg1) ]);

std::vector<int> ints;
boost::transform(
foolist,
back_inserter(ints),
lexical_casts::to_int(value_of(arg1)));

查看 Live On Coliru

关于c++ - boost::phoenix 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22339031/

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