关于asp.net的网站模板,seo国外英文论坛,照片制作相册,中山网站建设案例下面这段内容介绍了一个示例#xff0c;目的是帮助澄清归档概念#xff08;Archive Concept#xff09;的用法#xff0c;以便用户可以实现自己的归档类。simple_log_archive.hpp 实现了一个简单但实用的归档类#xff0c;用于将任何可序列化类型以可读的格式… 下面这段内容介绍了一个示例目的是帮助澄清归档概念Archive Concept的用法以便用户可以实现自己的归档类。simple_log_archive.hpp 实现了一个简单但实用的归档类用于将任何可序列化类型以可读的格式发送到输出文本流中。使用这个归档类非常简单示例如下 #include simple_log_archive.hpp
...
// 显示完整的时间表
simple_log_archive log(std::cout);
log schedule;
上述代码将时间表 schedule 以可读的格式输出到标准输出流并且产生了以下输出
schedule count 6item first driver bobhour 6minute 24second - stops count 3item - latitude degrees 34minutes 135seconds 52.56longitude degrees 134minutes 22seconds 78.3
...
这个示例的完整代码可以在 demo_simple_log.cpp 中找到。要更好地理解它的工作原理可以查看 “Trivial Archive”。此外请注意以下内容
仅包含了160行代码。仅包含头文件 - 无需链接到序列化库。能够显示所有可序列化类型。缺少一些功能。例如它不会显示作为二进制数据序列化的信息。当给定指向多态基类的指针时它不会显示派生类型的数据仅显示基类的信息。如果需要添加这种功能可以查看下一个示例。
simple_log_archive.hpp
#ifndef BOOST_SIMPLE_LOG_ARCHIVE_HPP
#define BOOST_SIMPLE_LOG_ARCHIVE_HPP// MS compatible compilers support #pragma once
#if defined(_MSC_VER) (_MSC_VER 1020)
# pragma once
#endif/1/2/3/4/5/6/7/8
// simple_log_archive.hpp// (C) Copyright 2010 Robert Ramey - http://www.rrsd.com .
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)// See http://www.boost.org for updates, documentation, and revision history.#include ostream
#include cstddef // std::size_t#include boost/config.hpp
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{ using ::size_t;
} // namespace std
#endif#include boost/type_traits/is_enum.hpp
#include boost/mpl/bool.hpp
#include boost/mpl/eval_if.hpp
#include boost/mpl/int.hpp
#include boost/mpl/equal_to.hpp
#include boost/serialization/nvp.hpp
#include boost/serialization/array.hpp
#include boost/serialization/string.hpp
#include boost/serialization/access.hpp/
// log data to an output stream. This illustrates a simpler implemenation
// of text output which is useful for getting a formatted display of
// any serializable class. Intended to be useful as a debugging aid.
class simple_log_archive {std::ostream m_os;unsigned int m_depth;templateclass Archivestruct save_enum_type {templateclass Tstatic void invoke(Archive ar, const T t){ar.m_os static_castint(t);}};templateclass Archivestruct save_primitive {templateclass Tstatic void invoke(Archive ar, const T t){ar.m_os t;}};templateclass Archivestruct save_only {templateclass Tstatic void invoke(Archive ar, const T t){// make sure call is routed through the highest interface that might// be specialized by the user.boost::serialization::serialize_adl(ar, const_castT (t), ::boost::serialization::version T ::value);}};templateclass Tvoid save(const T t){typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_ifboost::is_enum T ,boost::mpl::identitysave_enum_typesimple_log_archive ,//elseBOOST_DEDUCED_TYPENAME boost::mpl::eval_if// if its primitiveboost::mpl::equal_toboost::serialization::implementation_level T ,boost::mpl::int_boost::serialization::primitive_type,boost::mpl::identitysave_primitivesimple_log_archive ,// elseboost::mpl::identitysave_onlysimple_log_archive ::type typex;typex::invoke(*this, t);} #ifndef BOOST_NO_STD_WSTRINGvoid save(const std::wstring ws){m_os wide string types not suported in log archive;}#endifpublic:///// Implement requirements for archive concepttypedef boost::mpl::bool_false is_loading;typedef boost::mpl::bool_true is_saving;// this can be a no-op since we ignore pointer polymorphismtemplateclass Tvoid register_type(const T * NULL){}unsigned int get_library_version(){return 0;}void save_binary(const void *address, std::size_t count){m_os save_binary not implemented;}// the operators templateclass Tsimple_log_archive operator(T const t){m_os ;save(t);return * this;}templateclass Tsimple_log_archive operator(T * const t){m_os -;if(NULL t)m_os null;else*this * t;return * this;}templateclass T, int Nsimple_log_archive operator(const T (t)[N]){return *this boost::serialization::make_array(static_castconst T *(t[0]),N);}templateclass Tsimple_log_archive operator(const boost::serialization::nvp T t){m_os \n; // start line with each named object// indent according to object depthfor(unsigned int i 0; i m_depth; i)m_os ;m_depth;m_os t.name(); // output the name of the object* this t.const_value();--m_depth;return * this;}// the operator templateclass Tsimple_log_archive operator(const T t){return * this t;}///simple_log_archive(std::ostream os) :m_os(os),m_depth(0){}
};#endif // BOOST_SIMPLE_LOG_ARCHIVE_HPPdemo_log.cpp
/1/2/3/4/5/6/7/8
//
// demo_log.cpp
//
// (C) Copyright 2009 Robert Ramey - http://www.rrsd.com .
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)#include iostream
#include cstdio#include demo_gps.hpp
#include simple_log_archive.hppint main(int argc, char *argv[])
{ // make the schedulebus_schedule schedule;// fill in the data// make a few stopsbus_stop *bs0 new bus_stop_corner(gps_position(34, 135, 52.560f),gps_position(134, 22, 78.30f),24th Street, 10th Avenue);bus_stop *bs1 new bus_stop_corner(gps_position(35, 137, 23.456f),gps_position(133, 35, 54.12f),State street, Cathedral Vista Lane);bus_stop *bs2 new bus_stop_destination(gps_position(35, 136, 15.456f),gps_position(133, 32, 15.300f),White House);bus_stop *bs3 new bus_stop_destination(gps_position(35, 134, 48.789f),gps_position(133, 32, 16.230f),Lincoln Memorial);// make a routesbus_route route0;route0.append(bs0);route0.append(bs1);route0.append(bs2);// add trips to scheduleschedule.append(bob, 6, 24, route0);schedule.append(bob, 9, 57, route0);schedule.append(alice, 11, 02, route0);// make aother routesbus_route route1;route1.append(bs3);route1.append(bs2);route1.append(bs1);// add trips to scheduleschedule.append(ted, 7, 17, route1);schedule.append(ted, 9, 38, route1);schedule.append(alice, 11, 47, route1);// display the complete schedulesimple_log_archive log(std::cout);log schedule;delete bs0;delete bs1;delete bs2;delete bs3;return 0;
}