Я пытаюсь заполнить boost::property_tree::ptree
с Boost.Assign. Таким образом, я получил следующие прекрасно работали:Boost.Bind return type
namespace bpt = boost::property_tree;
bpt::ptree pt;
boost::assign::make_list_inserter
(boost::bind(&bpt::ptree::put<std::string>, pt, _1, _2))
("one.two.three", "four")
("one.two.five", "six");
Однако, когда я пытаюсь сделать этот код лучше выглядит, она не компилировать:
typedef bpt::ptree& (bpt::ptree::*PutType)
(const bpt::path_of<std::string>::type&, const std::string &);
PutType Put = &bpt::ptree::put<std::string>;
inline boost::assign::list_inserter<PutType> put(bpt::ptree &pt) {
PutType putFunction = boost::bind(Put, pt, _1, _2); // !!! compile error
return boost::assign::make_list_inserter(putFunction);
}
//and use it like:
put(pt)
("one.two.three", "four")
("one.two.five", "six");
Сообщение об ошибке является
SomeFile.cpp: In function ‘boost::assign::list_inserter<boost::property_tree::ptree& (boost::property_tree::ptree::*)(const boost::property_tree::string_path<std::string, boost::property_tree::id_translator<std::string > >&, const std::string&), boost::assign_detail::forward_n_arguments> put(boost::property_tree::ptree&)’:
SomeFile.cpp:42: error: cannot convert ‘boost::_bi::bind_t<boost::property_tree::ptree&, boost::_mfi::mf2<boost::property_tree::ptree&, boost::property_tree::ptree, const boost::property_tree::string_path<std::string, boost::property_tree::id_translator<std::string > >&, const std::string&>, boost::_bi::list3<boost::_bi::value<boost::property_tree::ptree >, boost::arg<1>, boost::arg<2> > >’ to ‘boost::property_tree::ptree& (boost::property_tree::ptree::*)(const boost::property_tree::string_path<std::string, boost::property_tree::id_translator<std::string > >&, const std::string&)’ in initialization
Что лучше всего сделать, чтобы код работал?
Спасибо (+1). Вы знаете, как я могу переписать код, чтобы он работал? – Loom
Еще раз спасибо. Почему 'boost :: function' тяжело? Есть ли какие-то штрафы за производительность? – Loom
@Loom 'boost :: function' включает выделение памяти при построении и копировании; и указатель-указатель при вызове. Он оптимизирован для некоторых простых случаев, чтобы избежать выделения памяти, хотя это не такие случаи. –