chai スクリプトが最終的にパブリック変数とメソッドを読み取り/アクセス/呼び出しできるように、カスタム C++ オブジェクト参照を単純な chai スクリプトに渡そうとしています。
これが可能であるかどうか、また、chai内で以前にクラスが定義されていなくてもクラス値にアクセスできるかどうか、chaiスクリプト関数内に渡されるかどうかはわかりません...洞察は非常に役に立ちます。これに関連するドキュメントの特定のセクションが見つからないためです。
これは非常に基本的な実装です。
ChaiScript.h
#pragma once
#include "ChaiScript\include\chaiscript\chaiscript.hpp"
class ChaiScript
{
public:
explicit ChaiScript(
const std::string& script_name);
~ChaiScript();
chaiscript::ChaiScript chai;
private:
};
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()
{
}
SampleClass.h
#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);
};
SampleClass.cpp
#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)
{
}
main.cpp
#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;
}
SampleScript.chai
def ReceiveSampleClass(SampleClass sample)
{
var result = sample.m_x + sample.m_y;
print("2+2=" + to_string(result));
}