比较提升属性树
Comparing boost property trees
是否可能有两个比较属性树?==和!=存在运算符重载在ptree.hpp中,但使用它们会导致编译器错误。
ptree a;
ptree b;
auto match = (a == b);
结果:
2>c:program files (x86)microsoft visual studio 12.0vcincludexutility(2798): error C4996: 'std::_Equal1': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
2> c:program files (x86)microsoft visual studio 12.0vcincludexutility(2783) : see declaration of 'std::_Equal1'
2> c:boost1_57_0-msvc-12.0-32boostmulti_indexsequenced_index.hpp(953) : see reference to function template instantiation 'bool std::equal<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::sequenced_index_node<Super>>,boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::sequenced_index_node<Super>>>(_InIt1,_InIt1,_InIt2)' being compiled
2> with
2> [
2> Super=boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>>>>
2> , _InIt1=boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::sequenced_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>>>>>>
2> , _InIt2=boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::sequenced_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>>>>>>
2> ]
2> c:boost1_57_0-msvc-12.0-32boostmulti_index_container.hpp(1263) : see reference to function template instantiation 'bool boost::multi_index::detail::operator ==<SuperMeta,boost::mpl::vector0<boost::mpl::na>,SuperMeta,boost::mpl::vector0<boost::mpl::na>>(const boost::multi_index::detail::sequenced_index<SuperMeta,boost::mpl::vector0<boost::mpl::na>> &,const boost::multi_index::detail::sequenced_index<SuperMeta,boost::mpl::vector0<boost::mpl::na>> &)' being compiled
2> with
2> [
2> SuperMeta=boost::multi_index::detail::nth_layer<1,std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<std::string>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>>>
2> ]
2> c:boost1_57_0-msvc-12.0-32boostproperty_treedetailptree_implementation.hpp(417) : see reference to function template instantiation 'bool boost::multi_index::operator ==<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<_Kty>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>,std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<_Kty>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>>(const boost::multi_index::multi_index_container<Value,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<_Kty>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>> &,const boost::multi_index::multi_index_container<Value,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<_Kty>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>> &)' being compiled
2> with
2> [
2> Key=std::string
2> , _Kty=std::string
2> , Value=std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>
2> ]
2> c:boost1_57_0-msvc-12.0-32boostproperty_treedetailptree_implementation.hpp(414) : while compiling class template member function 'bool boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>>::operator ==(const boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>> &) const'
2> with
2> [
2> _Kty=std::string
2> ]
2> b.cpp(63) : see reference to function template instantiation 'bool boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>>::operator ==(const boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>> &) const' being compiled
2> with
2> [
2> _Kty=std::string
2> ]
2> b.cpp(57) : see reference to class template instantiation 'boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>>' being compiled
2> with
2> [
2> _Kty=std::string
2> ]
如果这些运算符还不够,是否有其他方法可以确定ptree的内容是否相同?
当然,您可以实现自己的,但以上应该有效:
在Coliru上直播
#include <boost/property_tree/ptree.hpp>
using boost::property_tree::ptree;
int main() {
ptree a;
ptree b;
return (a==b)? 1 : 2;
}
返回1个
这是GCC或Clang,在Boost 1.59上(测试旧版本…)
更新
您尝试过定义_SCL_SECURE_NO_WARNINGS
吗?
error C4996: 'std::_Equal1': Function call with parameters that may be unsafe -
this call relies on the caller to check that the passed values are correct. To
disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- C++概念:如何使用'concept'检查模板化结构的属性?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- 基于对象的两个属性的自定义比较器会引发异常
- 如何在单个 SET 中比较结构的两个属性?
- 正确的方法或设计模式,以简化类中的“operatorX”函数,以按给定顺序比较相同类型的属性
- 将对向量进行比较与pugi :: xml_object_range属性
- C++等于(==)重载,比较所有属性的快捷方式或最佳方法
- TinyXML无法将属性与字符进行比较
- 从基类指针比较模板化子类的属性
- 比较对象的3个数字属性
- 在tinyxpath中给出错误匹配和不匹配的属性比较
- 比较提升属性树
- 获取所需属性的比较器