c++源文件如下
#include
#include
void greet()
{
std::cout << "hello world!/n";
}
void fly()
{
std::cout << "I can fly!/n";
}
extern "C" int init(lua_State* L)
{
using namespace luabind;
open(L);
module(L)
[
def("greet", &greet),
def("fly", &fly)
];
return 0;
}
看了下luabind源码,这个居然是通过标准的C++用法做到的
inline module_ module(lua_State* L, char const* name = 0);
module函数返回module_对象
class LUABIND_API module_
{
public:
module_(lua_State* L_, char const* name);
void operator[](scope s);
private:
lua_State* m_state;
char const* m_name;
};
module_重载了[],接受scope对象
template
scope def(char const* name, F f, Policies const& policies)
{
return scope(std::auto_ptr (
new detail::function_registration (name, f, policies)));
}
template
scope def(char const* name, F f)
{
return def(name, f, detail::null_type());
}
def返回scope对象
struct LUABIND_API scope
{
scope();
explicit scope(std::auto_ptr reg);
scope(scope const& other_);
~scope();
scope& operator,(scope s);
void register_(lua_State* L) const;
private:
detail::registration* m_chain;
};
scope重载了,运算符
太优雅了!!!