On 03/03/2016 9:43 AM, Jens Weller wrote:
Hello,
Code below, first what I'm trying to do is... assign a value to a adapted struct (BOOST_FUSION_ADAPT_ADT), which works fine if both are of the same type or convertible:
template
typename std::enable_if< std::is_convertible< typename fusion::result_of::at_c ::type, V>::value ,void>::type assign(Seq& s, V& v) { fusion::get<I>(s) = v; } Some of my input is string, and the struct member is bool, unsigned int etc. In this case I'd need to know the type to convert from string.
boost::fusion::get returns the attribute_proxy for the adapted struct, so does at_c<>::type.
template
typename std::enable_if< !std::is_convertible< typename fusion::result_of::at_c ::type, V>::value /*&& !std::is_same ::value*/ ,void>::type assign(Seq& s, V& v) { std::stringstream ss; ss << v; ss >> fusion::get<I>(s); } Obviously this does not compile. Is there any trick to get to the type of the proxy?
One idea I have is decltype(fusion::get<I>(s).get()), but not sure if I can get this to work in an enable_if...
Hi Jens, Try attribute_proxy::type. It's documented here: http://www.boost.org/doc/libs/1_50_0/libs/fusion/doc/html/fusion/notes.html#... Regards, -- Joel de Guzman http://www.ciere.com http://boost-spirit.com http://www.cycfi.com/