Boost logo

Boost :

Subject: [boost] [fusion] getting type of attribute_proxy for BOOST_FUSION_ADAPT_ADT
From: Jens Weller (JensWeller_at_[hidden])
Date: 2016-03-02 20:43:12


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<int I, class Seq, class V>
typename std::enable_if< std::is_convertible< typename fusion::result_of::at_c<Seq, I>::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<int I, class Seq, class V>
typename std::enable_if< !std::is_convertible< typename fusion::result_of::at_c<Seq, I>::type, V>::value /*&& !std::is_same<typename std::decay<V>::type,std::string>::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...

thanks,

Jens Weller


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk