Hansi | 21 May 21:26

Re: tuple type question

Hello,

Thank you for your helped.
You was right. I have tested your code inside mine. For that I have 
adapted something and the problem (I have posted it in another answer).
The problem ist that I had the follwing struct:

struct Test
{
      typedef boost::tuple<int,char> tuple_t;
      tuple_t tup;
      enum Members { NAME, VALUE };

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

and here the declaration doesn't work.

I use boost 1.34.1

Thank you very much
Hansjörg

Noah Roberts schrieb:
> Hansi wrote:
>> 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?
> 
> That's exactly the compiler I used to compile this code.  Have you 
> altered it in some way?  The typename keyword is quite specifically 
> needed in the above code, but would be quite specifically disallowed 
> with some minor differences, namely if the "Test" class was not 
> templated or if the tuple type was not dependent on any of the template 
> parameters.
> 
> Try to just create a new project and copy/paste my code into it, 
> replacing their non-standard main function with the one I have.  You'll 
> probably need to keep the "stdafx.h" include.
> 
> What version of boost?  I have 1.34 on this system; we have not upgraded 
> yet as our products will adversely affected by changes to some libraries 
> and we're not yet prepared to deal with that.
> 
> I have a feeling though that you tried to integrate my code into your 
> particular problem without first testing mine.  You may very well not 
> need the 'typename' keyword.  I would suggest really studying when and 
> where to use that keyword if that's the case for it is fundamental to 
> understanding templates and is not the easiest thing in the world to learn.

Gmane