lazy_ostream.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 115 行

HPP
115
字号
//  (C) Copyright Gennadiy Rozental 2008.//  Distributed under 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/libs/test for the library home page.////  File        : $RCSfile$////  Version     : $Revision: 49312 $////  Description : contains definition for all test tools in test toolbox// ***************************************************************************#ifndef BOOST_TEST_LAZY_OSTREAM_HPP_070708GER#define BOOST_TEST_LAZY_OSTREAM_HPP_070708GER// Boost.Test#include <boost/test/detail/config.hpp>// STL#include <iosfwd>#include <boost/test/detail/suppress_warnings.hpp>//____________________________________________________________________________//// ************************************************************************** //// **************                  lazy_ostream                ************** //// ************************************************************************** //namespace boost {namespace unit_test {class lazy_ostream {public:    static lazy_ostream&    instance()                                              { static lazy_ostream inst; return inst; }    friend std::ostream&    operator<<( std::ostream& ostr, lazy_ostream const& o ) { return o( ostr ); }    // access method    bool                    empty() const                                           { return m_empty; }    // actual printing interface; to be accessed only by this class and children    virtual std::ostream&   operator()( std::ostream& ostr ) const                  { return ostr; }protected:    explicit                lazy_ostream( bool empty = true ) : m_empty( empty )    {}    // protected destructor to make sure right one is called#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))public:#endif    BOOST_TEST_PROTECTED_VIRTUAL ~lazy_ostream()                                    {}private:    // Data members    bool                    m_empty;};//____________________________________________________________________________//template<typename T>class lazy_ostream_impl : public lazy_ostream {public:    lazy_ostream_impl( lazy_ostream const& prev, T value )    : lazy_ostream( false )    , m_prev( prev )    , m_value( value )    {}private:    virtual std::ostream&   operator()( std::ostream& ostr ) const    {        return m_prev(ostr) << m_value;    }    // Data members    lazy_ostream const&     m_prev;    T                       m_value;};//____________________________________________________________________________//template<typename T>inline lazy_ostream_impl<T const&>operator<<( lazy_ostream const& prev, T const& v ){    return lazy_ostream_impl<T const&>( prev, v );}//____________________________________________________________________________//#if BOOST_TEST_USE_STD_LOCALEtemplate<typename R,typename S>inline lazy_ostream_impl<R& (BOOST_TEST_CALL_DECL *)(S&)>operator<<( lazy_ostream const& prev, R& (BOOST_TEST_CALL_DECL *man)(S&) ){    return lazy_ostream_impl<R& (BOOST_TEST_CALL_DECL *)(S&)>( prev, man );}//____________________________________________________________________________//#endif} // namespace unit_test} // namespace boost//____________________________________________________________________________//#include <boost/test/detail/enable_warnings.hpp>#endif // BOOST_TEST_LAZY_OSTREAM_HPP_070708GER

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?