Noah Roberts | 20 May 18:43
Picon
Gravatar

Re: tuple type question

Hansi wrote:
> Hello,
> 
> at the moment I want to make a getter function for a tuple type. The 
> tuple is internally hidden in a class. For that I want to make a 
> function which returns the values inside the tuple. The best solution 
> would be if I can make a enum which defines the position inside the 
> tuple and a template function which returns the value for this tuple.
> 
> I have tested the following, but it doesn't work:
> 
> typedef struct Members
> 		{
> 			enum Member
> 			{
> 				name = 0,
> 				value = 1,
> 			};
> 		}Members;
> 
> 		template<enum Member member>
> 		element<0, Properties::Property>::type name()(const 
> boost::tuples::tuple<std::wstring, boost::any>& prop)
> 		{
> 			return boost::tuples::get<member>(prop);
> 		}

I didn't quite understand your goals here so I implemented both I 
thought you could mean:

#include <boost/tuple/tuple.hpp>
#include <string>
#include <iostream>

template < typename T1, typename T2 >
struct Test
{
   typedef boost::tuple<T1,T2> tuple_t;
   tuple_t tup;

   enum Members { NAME, VALUE };

   typename boost::tuples::element<NAME, tuple_t>::type name() { return 
tup.get<NAME>(); }

   template < Members mem >
   typename boost::tuples::element<mem, tuple_t>::type member() { return 
tup.get<mem>(); }
};

int main()
{
   Test<std::string, int> t;
   t.tup = Test<std::string,int>::tuple_t("Test", 42);

   std::cout << t.name() << std::endl;
   std::cout << t.member<Test<std::string,int>::VALUE>() << std::endl;

   std::cin.get();
}

Get the metaprogramming book by Abrahams and Gurtovoy.  It's completely 
necessary to understand metaprogramming to be able to use these aspects 
of boost.

Gmane