C++ 通过C++;对象创建一个ChaiScript函数
我试图通过一个自定义C++对象引用传递给一个简单的CHAI脚本,这样,CHAI脚本最终可以读取/访问/调用公共变量和方法。 我不确定这是否可能,也不确定一旦它被传递到chai脚本函数中,它是否可以访问类值,而不必在chai中预先定义类。。。任何见解都会非常有用,因为我在文档中找不到与此相关的特定部分 这里是一个非常基本的实现 ChaiScript.hC++ 通过C++;对象创建一个ChaiScript函数,c++,chaiscript,C++,Chaiscript,我试图通过一个自定义C++对象引用传递给一个简单的CHAI脚本,这样,CHAI脚本最终可以读取/访问/调用公共变量和方法。 我不确定这是否可能,也不确定一旦它被传递到chai脚本函数中,它是否可以访问类值,而不必在chai中预先定义类。。。任何见解都会非常有用,因为我在文档中找不到与此相关的特定部分 这里是一个非常基本的实现 ChaiScript.h #pragma once #include "ChaiScript\include\chaiscript\chaiscript.hpp" cl
#pragma once
#include "ChaiScript\include\chaiscript\chaiscript.hpp"
class ChaiScript
{
public:
explicit ChaiScript(
const std::string& script_name);
~ChaiScript();
chaiscript::ChaiScript chai;
private:
};
#pragma once
#include <string>
class SampleClass
{
public:
SampleClass(
const int id,
const int x,
const int y,
const std::string& name);
const int m_id;
int m_x;
int m_y;
std::string m_name;
private:
// Disable copying as we don't want to make a copy each time we pass the class to chai...
SampleClass();
SampleClass(const SampleClass& rhs);
SampleClass& operator=(const SampleClass& rhs);
};
ChaiScript.cpp
#include "ChaiScript.h"
ChaiScript::ChaiScript(
const std::string& script_name)
{
chai.add(chaiscript::vector_conversion<std::vector<int>>());
chai.eval_file(script_name);
}
ChaiScript::~ChaiScript()
{
}
#include "SampleClass.h"
SampleClass::SampleClass(
const int id,
const int x,
const int y,
const std::string& name) :
m_id(id),
m_x(x),
m_y(y),
m_name(name)
{
}
#include "ChaiScript.h"
#include "SampleClass.h"
int main()
{
SampleClass* sample_class = new SampleClass(0, 1, 2, "Test");
ChaiScript* script = new ChaiScript("Scripts\\SampleScript.chai");
// This line is where I start to need help as it does not compile.
script->chai.eval<std::function<void(&SampleClass)>>("ReceiveSampleClass")(&sample_class);
system("pause");
return 0;
}
main.cpp
#include "ChaiScript.h"
ChaiScript::ChaiScript(
const std::string& script_name)
{
chai.add(chaiscript::vector_conversion<std::vector<int>>());
chai.eval_file(script_name);
}
ChaiScript::~ChaiScript()
{
}
#include "SampleClass.h"
SampleClass::SampleClass(
const int id,
const int x,
const int y,
const std::string& name) :
m_id(id),
m_x(x),
m_y(y),
m_name(name)
{
}
#include "ChaiScript.h"
#include "SampleClass.h"
int main()
{
SampleClass* sample_class = new SampleClass(0, 1, 2, "Test");
ChaiScript* script = new ChaiScript("Scripts\\SampleScript.chai");
// This line is where I start to need help as it does not compile.
script->chai.eval<std::function<void(&SampleClass)>>("ReceiveSampleClass")(&sample_class);
system("pause");
return 0;
}
经过更多的搜索,我发现了如何做到这一点 我已将ChaiScript.cpp更改为以下内容:
#include "ChaiScript.h"
#include "SampleClass.h"
ChaiScript::ChaiScript(
const std::string& script_name)
{
chai.add(chaiscript::vector_conversion<std::vector<int>>());
chaiscript::ModulePtr m = chaiscript::ModulePtr(new chaiscript::Module());
chaiscript::utility::add_class<SampleClass>(*m,
"SampleClass",
{
chaiscript::constructor<SampleClass(const int id, const int x, const int y, const std::string & name)>()
},
{
{chaiscript::fun(&SampleClass::m_x), "X"}
});
chai.add(m);
chai.eval_file(script_name);
}
ChaiScript::~ChaiScript()
{
}
我缺少的过程是将类添加到模块并将其添加到脚本中
chaiscript::ModulePtr m = chaiscript::ModulePtr(new chaiscript::Module());
chaiscript::utility::add_class<SampleClass>(*m,
"SampleClass",
{
chaiscript::constructor<SampleClass(const int id, const int x, const int y, const std::string & name)>()
},
{
{chaiscript::fun(&SampleClass::m_x), "X"}
});
chai.add(m);
chaiscript::ModulePtr m=chaiscript::ModulePtr(新chaiscript::Module());
chaiscript::utility::add_class(*m,
“样本类”,
{
chaiscript::构造函数()
},
{
{chaiscript::fun(&SampleClass::m_x),“x”}
});
添加(m);