|
Boost Users : |
Subject: Re: [Boost-users] [PropertyTree] Using with std algorithms
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2011-05-19 12:52:38
On Thu, May 19, 2011 at 5:24 PM, Sebastian Redl <
sebastian.redl_at_[hidden]> wrote:
>
> On 19.05.2011, at 08:56, Robert Jones wrote:
>
> Hi All
>
> Is it possible and practical to use the put and get methods of
> Boost.PropertyTree with std
> algorithms?
>
> I've written this snippet, which doesn't compile, which I think is because
> I have not correctly
> expressed the return type of "put()". Is it possible to do this?
>
>
> Yes, the put() overloads all return the affected tree node.
>
> for_each( boost::begin( v ), boost::end( v ),
> bind( static_cast<void (ptree::*)( const std::string &,
> unsigned )>( & ptree::put ), boost::ref( tree ), "Values.value", _1 ) );
>
>
> Try this:
>
> static_cast<ptree& (ptree::*)(...)>
>
>
Hi Sebstian
Thanks for that, I thought that should work too, but seems there's still an
overload problem!
#include <algorithm>
#include <vector>
#include <boost/range.hpp>
#include <boost/bind.hpp>
#include <boost/property_tree/ptree.hpp>
int main( )
{
using boost::property_tree::ptree;
std::vector<unsigned> v;
ptree tree;
ptree & ( ptree::*myput )( const std::string &, unsigned ) = &
ptree::put;
for_each( boost::begin( v ), boost::end( v ),
bind( myput, boost::ref( tree ), "Values.value", _1 ) );
}
> g++ ptree.cpp
ptree.cpp: In function int main():
ptree.cpp:14: error: no matches converting function put to type struct
boost::property_tree::ptree& (struct
boost::property_tree::basic_ptree<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::less<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > >::*)(const struct std::string&, unsigned int)
/usr/include/boost/property_tree/ptree.hpp:446: error: candidates are:
template<class Type, class Translator> boost::property_tree::basic_ptree<K,
D, C>& boost::property_tree::basic_ptree::put(const typename
boost::property_tree::path_of<Key>::type&, const Type&, Translator) [with
Type = Type, Translator = Translator, Key = std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, Data =
std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
KeyCompare = std::less<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > >]
/usr/include/boost/property_tree/ptree.hpp:455: error:
template<class Type> boost::property_tree::basic_ptree<K, D, C>&
boost::property_tree::basic_ptree::put(const typename
boost::property_tree::path_of<Key>::type&, const Type&) [with Type = Type,
Key = std::basic_string<char, std::char_traits<char>, std::allocator<char>
>, Data = std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, KeyCompare = std::less<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >]
Any ideas?
Thx
- Rob.
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