c++ - boost::property_tree without exceptions -


i need parse ini files. this, i'm trying use boost::property_tree, in system exceptions not allowed.

how can disable exception support when using boost::property_tree?

if there's no way this, recommendations library appreciated.

after answer @sehe, tried piece of code, without success:

#include <iostream>    #include <string> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp>  namespace boost {     void throw_exception(std::exception const& e) {         std::cerr << "fake exception: " << e.what() << "\n";         std::exit(255);     } }  class foo {     public:       bool bar(const std::string file_name) {         boost::property_tree::ptree prop_tree;         boost::property_tree::read_ini(file_name, prop_tree);          return !prop_tree.empty();       } }; 

the compilation line code uses following parameters:

-c -dboost_user_config="<user.hpp>" -dboost_no_exceptions -dboost_exception_disable -i.\toolchain\boost -i.\include foo.cpp 

and finally, user.hpp file:

#define boost_has_nrvo #define boost_no_complete_value_initialization #define boost_no_cxx11_auto_declarations #define boost_no_cxx11_auto_multideclarations #define boost_no_cxx11_char16_t #define boost_no_cxx11_char32_t #define boost_no_cxx11_constexpr #define boost_no_cxx11_decltype #define boost_no_cxx11_decltype_n3276 #define boost_no_cxx11_defaulted_functions #define boost_no_cxx11_deleted_functions #define boost_no_cxx11_explicit_conversion_operators #define boost_no_cxx11_final #define boost_no_cxx11_function_template_default_args #define boost_no_cxx11_lambdas #define boost_no_cxx11_local_class_template_parameters #define boost_no_cxx11_noexcept #define boost_no_cxx11_nullptr #define boost_no_cxx11_range_based_for #define boost_no_cxx11_raw_literals #define boost_no_cxx11_ref_qualifiers #define boost_no_cxx11_rvalue_references #define boost_no_cxx11_scoped_enums #define boost_no_cxx11_static_assert #define boost_no_cxx11_template_aliases #define boost_no_cxx11_unicode_literals #define boost_no_cxx11_unified_initialization_syntax #define boost_no_cxx11_user_defined_literals #define boost_no_cxx11_variadic_macros #define boost_no_cxx11_variadic_templates #define boost_no_sfinae_expr #define boost_no_two_phase_name_lookup 

some errors returned compiler:

"boost/optional/optional.hpp", line 1047: error:  #312: no suitable user-defined conversion "boost::bad_optional_access" "const std::exception" exists             throw_exception(bad_optional_access());                             ^  "boost/property_tree/string_path.hpp", line 221: error:  #312: no suitable user-defined conversion "boost::property_tree::ptree_bad_path" "const std::exception" exists           boost_property_tree_throw(ptree_bad_path("path syntax error", *this));           ^  "boost/property_tree/detail/ptree_implementation.hpp", line 78: error:  #742: namespace "boost" has no actual member "iterator_core_access"           friend class boost::iterator_core_access;                               ^ 

ps: i'm not using widely-available standard compiler, it's compiling boost::smart_ptr, using same process described above.

you can configure boost exception not use exceptions:

you need define boost_no_exceptions , further implement own c-style exception handling function, e.g.

void throw_exception(std::exception const& e) {     std::cerr << "fake exception: " << e.what() << "\n";     std::exit(255); } 

live on coliru

#define boost_no_exceptions #include <iostream> #include <boost/property_tree/ini_parser.hpp>  namespace boost {     void throw_exception(std::exception const& e) {         std::cerr << "fake exception: " << e.what() << "\n";         std::exit(255);     } }  using namespace boost::property_tree;  int main() {     ptree pt;     read_ini(std::cin, pt);      write_ini(std::cout, pt.get_child("section5")); } 

compiled

g++ -std=c++11 -o3 -wall -pedantic main.cpp -fno-exceptions 

this prints

./test <<< "[section1]" fake exception: no such node (section5) 

Comments

Popular posts from this blog

javascript - Using jquery append to add option values into a select element not working -

Android soft keyboard reverts to default keyboard on orientation change -

Rendering JButton to get the JCheckBox behavior in a JTable by using images does not update my table -