【问题标题】:Accessing 0th element from boost::fusion::tuple从 boost::fusion::tuple 访问第 0 个元素
【发布时间】:2013-04-28 02:31:03
【问题描述】:

通常我会通过以下方式访问常规元组元素(比如 0)

mytuple->get<0>();

但是,如果元组是 boost::fusion::tuple 类型,我如何访问第 0 个元素

更多详情

我有这样的事情

typedef boost::fusion::tuple<double,double,double,std::string,double,double,int, 
                            double,double,double,double,int,  
                            double,double,double,double,double,
                            double,double,double,double,double,
                            double,double,double,double> tuple_def; 

typedef boost::shared_ptr<tuple_def> my_tuple_def;

现在我使用如下

shared_tuple_def btuple = boost::make_shared<tuple_def>(boost::fusion::make_tuple(323,0,0,"A",0,0,0,
                                                                                  0,0,0,0,0,
                                                                                  0,0,0,0,0,
                                                                                  0,0,0,0,0,
                                                                                  0,0,0,0));

如何访问第 0 个元素,即 323?

【问题讨论】:

  • 我敢问 tuple_def 究竟是什么意思吗?它就像一大堆双打和其他一些随机片段,似乎是使用结构而不是元组的好候选。
  • 最初只有 5 个元素,直到增加到这么多。我最终会将其转换为结构。 tuple_def 是第一个类型的 def。第一个 typedef 在下一条语句中使用
  • 我想这就是我几乎完全避免使用元组的原因——它从 5 个元素开始,接下来你知道它是 25 个元素并且很难修复。 :)

标签: c++ boost tuples boost-fusion


【解决方案1】:

您可以使用boost::fusion::getboost::fusion::at

#define FUSION_MAX_VECTOR_SIZE 26
#include <string>
#include <iostream>
#include <boost/fusion/tuple.hpp>
#include <boost/smart_ptr.hpp>
#include <boost/fusion/include/at.hpp>
#include <boost/mpl/int.hpp>
typedef boost::fusion::tuple<double,double,double,std::string,double,double,int, 
                            double,double,double,double,int,  
                            double,double,double,double,double,
                            double,double,double,double,double,
                            double,double,double,double> tuple_def; 

typedef boost::shared_ptr<tuple_def> shared_tuple_def;

int main() {
    shared_tuple_def btuple =
        boost::make_shared<tuple_def>(
            boost::fusion::make_tuple(
                323,0,0,"A",0,0,0,
                0,0,0,0,0,
                0,0,0,0,0,
                0,0,0,0,0,
                0,0,0,0));

    std::cout << boost::fusion::get<0>(*btuple) << "\n";
    std::cout << boost::fusion::at<boost::mpl::int_<0> >(*btuple) << "\n";
}

【讨论】:

    【解决方案2】:

    你可以使用boost::fusion::get

    int main()
    {
        shared_tuple_def btuple = boost::make_shared<tuple_def>
        (
            boost::fusion::make_tuple
            (
                323, 0, 0, "A", 0, 0, 0,
                0, 0, 0, 0, 0,
                0, 0, 0, 0, 0,
                0, 0, 0, 0, 0,
                0, 0, 0, 0
            )
        );
        std::cout << boost::fusion::get<0>(*btuple) << std::endl;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 2011-06-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多