test_exceptions.cpp.svn-base

来自「本人找过多个在linux下c++的lua5.1封装库,但很少.luabind已经」· SVN-BASE 代码 · 共 82 行

SVN-BASE
82
字号
// Copyright (c) 2004 Daniel Wallin// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the "Software"),// to deal in the Software without restriction, including without limitation// the rights to use, copy, modify, merge, publish, distribute, sublicense,// and/or sell copies of the Software, and to permit persons to whom the// Software is furnished to do so, subject to the following conditions:// The above copyright notice and this permission notice shall be included// in all copies or substantial portions of the Software.// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE// OR OTHER DEALINGS IN THE SOFTWARE.#include "test.hpp"#include <luabind/luabind.hpp>struct ex : public std::exception{    ex(const char* m): msg(m) {}    virtual const char* what() const throw() { return msg; }    const char* msg;};struct exception_thrower : counted_type<exception_thrower>{    exception_thrower() {}    exception_thrower(int) { throw ex("exception description"); }    exception_thrower(int, int) { throw "a string exception"; }    exception_thrower(int, int, int) { throw 10; }    int f() { throw ex("exception from a member function"); }    int g() { throw "a string exception"; }    int h() { throw 10; }};COUNTER_GUARD(exception_thrower);void test_main(lua_State* L){    using namespace luabind;#ifndef LUABIND_NO_EXCEPTIONS    module(L)    [        class_<exception_thrower>("throw")            .def(constructor<>())            .def(constructor<int>())            .def(constructor<int, int>())            .def(constructor<int, int, int>())            .def("f", &exception_thrower::f)            .def("g", &exception_thrower::g)            .def("h", &exception_thrower::h)    ];    DOSTRING_EXPECTED(L, "a = throw(1)", "exception description");    DOSTRING_EXPECTED(L, "a = throw(1,1)", "a string exception");    DOSTRING_EXPECTED(L, "a = throw(1,1,1)", "throw() threw an exception");    DOSTRING(L, "a = throw()");    DOSTRING_EXPECTED(L, "a:f()", "exception from a member function");    DOSTRING_EXPECTED(L, "a:g()", "a string exception");    DOSTRING_EXPECTED(L, "a:h()", "throw:h() threw an exception");    DOSTRING_EXPECTED(L,         "obj = throw('incorrect', 'parameters', 'constructor')",        "no constructor of 'throw' matched the arguments "        "(string, string, string)\n candidates are:\n"        "throw()\nthrow(number)\nthrow(number, number)\n"        "throw(number, number, number)\n");#endif}

⌨️ 快捷键说明

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