2013-04-28 56 views
1

通常我會以下列方式從boost ::融合::元組訪問第0個元素

mytuple->get<0>(); 

但是,如果元組類型的boost ::融合的訪問規則的元組元素(比如0): :元組如何訪問第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?

+0

難道我不敢問什麼tuple_def實際上意味着什麼?這就像一大堆雙打和其他隨機碎片,似乎是使用結構而不是元組的一個很好的選擇。 – 2013-04-28 02:46:52

+0

最初它只有5個元素,直到它增加到這麼多。我最終會將其轉換爲結構體。 'tuple_def'是第一個類型def。第一個typedef用於下一個語句 – MistyD 2013-04-28 02:51:25

+0

我想這就是爲什麼我幾乎完全避免了元組 - 它從5個元素開始,接下來的事情你知道它是25並且難以修復。 :) – 2013-04-28 02:55:30

回答

3

你可以使用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; 
} 
5

您可以使用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"; 
}