c++ - 使用 phoenix 访问 boost::tuple 的简单方法

标签 c++ boost boost-phoenix

我想用 phoenix(c++98) 访问 boost::tuple 元素

#include <boost/tuple/tuple.hpp>
#include <boost/phoenix.hpp>

#include <algorithm>
#include <vector>

int main()
{
    using namespace boost::phoenix::placeholders;

    std::vector<boost::tuple<int> > vec;
    vec.push_back(boost::make_tuple(3));
    vec.push_back(boost::make_tuple(4));

    std::for_each(vec.begin(), vec.end(), std::cout<<boost::get<0>(arg1)<<std::endl);
}

但它无法工作,我已经尝试使用 std::pair 和 self define struct,但它们也无法工作。是否可以通过一些直观、简单的解决方案访问这些元素?

最佳答案

只是发现你可以使用 boost::phoenix::at_c 来访问元组元素

std::for_each(vec.begin(), vec.end(), std::cout<<boost::phoenix::at_c<0>(arg1)<<std::endl);

你也可以使用 phoenix 访问 std::pair,但需要包含标题

#include <boost/fusion/adapted.hpp>

仍然缺少访问自定义结构的示例,如果我能弄明白我会发布

编辑:你需要包括

#include <boost/phoenix/fusion.hpp>

否则 at_c 可能找不到

关于c++ - 使用 phoenix 访问 boost::tuple 的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29639621/

相关文章:

c++ - 使用 lambda 或外部函数作为 spirit.qi 语义 Action

c++ - 将规则生成绑定(bind)到我的结构成员时出现编译错误

c++ - Boost phoenix值和函数返回值类型

c++ - boost::unique_lock 和 boost::upgrade_lock 之间的区别?

C++ if 语句

c++ - 如何将字符串 vector 传递给 execv

c++ - 使用迭代器的模板类的构造函数

c++ - 来自 boost::asio::async_write 的 WriteHandler 在连接断开时无法正常工作(防火墙/手动断开网络连接)

C++ boost::mpl::type 前向声明

c++ - std::transform 与 std::reference_wrapper