reference_wrapper_test.cpp

来自「stl的源码」· C++ 代码 · 共 86 行

CPP
86
字号
#include <functional>#if !defined(_STLP_NO_EXTENSIONS) && defined(_STLP_USE_BOOST_SUPPORT)#include <typeinfo>#include "cppunit/cppunit_proxy.h"#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)using namespace std;#endifclass RefWrapperTest :    public CPPUNIT_NS::TestCase{    CPPUNIT_TEST_SUITE(RefWrapperTest);    CPPUNIT_TEST(ref);    CPPUNIT_TEST(cref);    CPPUNIT_TEST_SUITE_END();  protected:    void ref();    void cref();};CPPUNIT_TEST_SUITE_REGISTRATION(RefWrapperTest);void RefWrapperTest::ref(){  typedef std::tr1::reference_wrapper<int> rr_type;  CPPUNIT_CHECK( (::boost::is_convertible<rr_type, int&>::value) );  CPPUNIT_CHECK( (::boost::is_same<rr_type::type, int>::value) );  int i = 1;  int j = 2;  rr_type r1 = std::tr1::ref(i);  CPPUNIT_CHECK( r1.get() == 1 );  r1 = std::tr1::ref(j);  CPPUNIT_CHECK( r1.get() == 2 );  i = 3;  CPPUNIT_CHECK( r1.get() == 2 );  j = 4;  CPPUNIT_CHECK( r1.get() == 4 );  r1.get() = 5;  CPPUNIT_CHECK( j == 5 );}void RefWrapperTest::cref(){  typedef std::tr1::reference_wrapper<const int> crr_type;  CPPUNIT_CHECK( (::boost::is_convertible<crr_type, const int&>::value) );  CPPUNIT_CHECK( (::boost::is_same<crr_type::type, const int>::value) );  int i = 1;  int j = 2;  crr_type r1 = std::tr1::cref(i);  CPPUNIT_CHECK( r1.get() == 1 );  r1 = std::tr1::cref(j);  CPPUNIT_CHECK( r1.get() == 2 );  i = 3;  CPPUNIT_CHECK( r1.get() == 2 );  j = 4;  CPPUNIT_CHECK( r1.get() == 4 );}#endif /* !_STLP_NO_EXTENSIONS && _STLP_USE_BOOST_SUPPORT */

⌨️ 快捷键说明

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