2013-04-28 2 views
1

Обычно я бы доступ к регулярному кортеж элемент (скажем, 0) следующим образомДоступ к 0-й элемент из повышения :: слитого :: кортеж

mytuple->get<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 на самом деле означает? Это похоже на большую кучу двойников и некоторых других случайных фигур, кажется хорошим кандидатом на использование структуры вместо кортежа. –

+0

Первоначально это было всего 5 элементов, пока оно не увеличилось до этого. Я в конечном итоге преобразую его в структуру. 'tuple_def' - это первый тип def. Первый typedef используется в следующем утверждении – MistyD

+0

Я думаю, именно поэтому я избегаю кортежей почти полностью - он начинается с 5 элементов, а следующая вещь, которую вы знаете, это 25, и ее трудно исправить. :) –

ответ

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::get или boost::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"; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^