Boost logo

Boost Users :

From: Hansi (hansipet_at_[hidden])
Date: 2008-05-21 02:42:34


Noah Roberts schrieb:
> 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>(); }

this version doesn't work with my compiler (msvc8.0). I get the error:

error C2899:typename cannot be used outside a template declaration

But this would be the preferred version for me. Have you an idea how I
can solve this?

Best regards
Hansjörg

>
> 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.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net