Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Five Minute Tutorial

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 28. Boost.PropertyTree

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Этот учебник использует XML. Обратите внимание, что библиотека не привязана к XML, и вместо нее можно использовать любой другой поддерживаемый формат (например, INI или JSON). XML был выбран потому, что автор считает, что с ним знаком широкий круг людей.

Предположим, что мы пишем систему журналирования для какого-либо приложения и должны прочитать конфигурацию журнала из файла, когда программа запускается. Файл с конфигурацией журнала выглядит так:

<debug>
    <filename>debug.log</filename>
    <modules>
        <module>Finance</module>
        <module>Admin</module>
        <module>HR</module>
    </modules>
    <level>2</level>
</debug>

Он содержит имя файла журнала, список модулей, в которых включена регистрация, и значение уровня отладки.

Во-первых, нам нужны некоторые из них:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp>
#include <string>
#include <set>
#include <exception>
#include <iostream>
namespace pt = boost::property_tree;

Для сохранения конфигурации журнала в программе мы создаем структуру debug_settings:

struct debug_settings
{
    std::string m_file;               // log filename
    int m_level;                      // debug level
    std::set<std::string> m_modules;  // modules where logging is enabled
    void load(const std::string &filename);
    void save(const std::string &filename);
};

Все, что нужно сделать сейчас, это записать реализации функций загрузки () и сохранения (). Давайте сначала разберемся с нагрузкой(). Он содержит всего 7 строк кода, хотя он делает все необходимые вещи, включая отчет об ошибках:

void debug_settings::load(const std::string &filename)
{
    // Create empty property tree object
    pt::ptree tree;
    // Parse the XML into the property tree.
    pt::read_xml(filename, tree);
    // Use the throwing version of get to find the debug filename.
    // If the path cannot be resolved, an exception is thrown.
    m_file = tree.get<std::string>("debug.filename");
    // Use the default-value version of get to find the debug level.
    // Note that the default value is used to deduce the target type.
    m_level = tree.get("debug.level", 0);
    // Use get_child to find the node containing the modules, and iterate over
    // its children. If the path cannot be resolved, get_child throws.
    // A C++11 for-range loop would also work.
    BOOST_FOREACH(pt::ptree::value_type &v, tree.get_child("debug.modules")) {
        // The data function is used to access the data stored in a node.
        m_modules.insert(v.second.data());
    }
}

Теперь функция сохранения(). Это также 7 строк кода:

void debug_settings::save(const std::string &filename)
{
    // Create an empty property tree object.
    pt::ptree tree;
    // Put the simple values into the tree. The integer is automatically
    // converted to a string. Note that the "debug" node is automatically
    // created if it doesn't exist.
    tree.put("debug.filename", m_file);
    tree.put("debug.level", m_level);
    // Add all the modules. Unlike put, which overwrites existing nodes, add
    // adds a new node at the lowest level, so the "modules" node will have
    // multiple "module" children.
    BOOST_FOREACH(const std::string &name, m_modules)
        tree.add("debug.modules.module", name);
    // Write property tree to XML file
    pt::write_xml(filename, tree);
}

Полная программаdebug_settings.cppвключен в каталог примеров.


PrevUpHomeNext

Статья Five Minute Tutorial раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 28. Boost.PropertyTree может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 28. Boost.PropertyTree ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 08:44:24/0.0038011074066162/0