member.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 88 行

CPP
88
字号
/*=============================================================================    Copyright (c) 2005-2007 Dan Marsden    Copyright (c) 2005-2007 Joel de Guzman    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)==============================================================================*/#include <boost/spirit/include/phoenix_core.hpp>#include <boost/spirit/include/phoenix_operator.hpp>#include <boost/detail/lightweight_test.hpp>#include <memory>#include <boost/shared_ptr.hpp>#include <boost/scoped_ptr.hpp>namespace{    struct Test    {        int value;        int func(int n) const { return n; }        int dunc() { return 10; }        int kunc() const { return 555; }    };}int main(){    using namespace boost::phoenix;    using namespace boost::phoenix::arg_names;    using namespace boost;    Test test = {1};    const Test* cptr = &test;    Test* ptr = &test;    BOOST_TEST((val(ptr)->*&Test::value)() == 1);    BOOST_TEST((val(cptr)->*&Test::value)() == 1);    BOOST_TEST((arg1->*&Test::value)(cptr) == 1);    ((val(ptr)->*&Test::value) = 2)();    BOOST_TEST(test.value == 2);    BOOST_TEST((val(ptr)->*&Test::func)(3)() == 3);    int i = 33;    BOOST_TEST((arg1->*&Test::func)(arg2)(cptr, i) == i);    BOOST_TEST((val(cptr)->*&Test::func)(4)() == 4);    BOOST_TEST((val(ptr)->*&Test::dunc)()() == 10);    BOOST_TEST((arg1->*&Test::func)(5)(ptr) == 5);    BOOST_TEST((arg1->*&Test::kunc)()(ptr));    shared_ptr<Test> sptr(new Test(test));    BOOST_TEST((arg1->*&Test::value)(sptr) == 2);    BOOST_TEST((arg1->*&Test::func)(6)(sptr) == 6);    scoped_ptr<Test> scptr(new Test(test));    BOOST_TEST((arg1->*&Test::value)(scptr) == 2);    BOOST_TEST((arg1->*&Test::func)(7)(scptr) == 7);    shared_ptr<const Test> csptr(new Test(test));    BOOST_TEST((arg1->*&Test::value)(csptr) == 2);    BOOST_TEST((arg1->*&Test::func)(8)(csptr) == 8);    scoped_ptr<const Test> cscptr(new Test(test));    BOOST_TEST((arg1->*&Test::value)(cscptr) == 2);    BOOST_TEST((arg1->*&Test::func)(9)(cscptr) == 9);    std::auto_ptr<Test> aptr(new Test(test));    BOOST_TEST((arg1->*&Test::value)(aptr) == 2);    BOOST_TEST((arg1->*&Test::func)(10)(aptr) == 10);    std::auto_ptr<const Test> captr(new Test(test));    BOOST_TEST((arg1->*&Test::value)(captr) == 2);    BOOST_TEST((arg1->*&Test::func)(11)(captr) == 11);    return 0;}

⌨️ 快捷键说明

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