通常有的函数使用std::function作为参数,官方自带的导出工具会提示不能导出,这时候需要我们手动绑定lua。
增加测试方法
打开上次的TestLua的win32工程,为TestClass增加一个testLambda方法
TestClass.h
#pragma once
#include "cocos2d.h"
class TestClass : public cocos2d::Ref
{
public:
TestClass()=default;
~TestClass()=default;
static void test1();
void test();
//新增的测试函数
void testLambda(const std::function<void(const std::string&)> &callback);
};
TestClass.cpp
#include "TestClass.h"
USING_NS_CC;
void TestClass::test()
{
CCLOG("Member function test");
}
void TestClass::test1()
{
CCLOG("Static function test");
}
//新增的测试函数
void TestClass::testLambda(const std::function<void(const std::string&)>& callback)
{
callback("Lambda test");
}
导出这个类
在TestLua/frameworks/cocos2d-x/tools/tolua目录下按住shift+鼠标右键,点击在此处打开命令窗口,输入myGenbindings.py,然后回车。
- 回到visual studio 2015,打开lua_my_auto.cpp,可以看到导出了刚写的方法int lua_my_TestClass_testLambda(lua_State* tolua_S)
- 这里我们可以看到官方导出对lambda不支持,需要我们自己手动编写代码。我们先修正导出的TestClass.h的include错误,再引入CCLuaEngine.h这个文件(手写代码需要用到)
#include "lua_my_auto.hpp"
#include "MyLuaBindings/TestClass.h" //修正
#include "tolua_fix.h"
#include "LuaBasicConversions.h"
#include "CCLuaEngine.h" //引入
- 这里我们按照接收一个lua的function做为参数来写代码