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?
This is a compiler error and should be reported as such. Even in C++03 the usage of typename is not limited to *dependent* names (although it must only occur in a template context), see [temp.res]/5: "[..] The keyword typename shall be applied only to qualified names, but those names need not be dependent. The keyword typename shall be used only in contexts in which dependent names can be used. This includes template declarations and definitions but excludes explicit specialization declarations and explicit instantiation declarations.[..]" Greetings from Bremen, Daniel Krügler