私の3Dエンジンをlua(5.1)パーサーに接続しようとしています。 たとえば、私はvec3のLUAクラスを持っていて、私はvec3のC++クラスを持っています。私は彼らにお互いに働きたい。C++クラスをLUAテーブルに接続
これは私のC++クラスの(一部)である:
class vec3
{
public:
vec3() {}
vec3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
vec3 operator+(const vec3 &b)
{
return vec3(x + b.x, y + b.y, z + b.z);
}
float dot(const vec3 &b)
{
return x * b.x + y * b.y + z * b.z;
}
float x, y, z;
}
これは(限られた)Luaのバージョンである:私はできるようにしたい:
vec3 = {};
vec3.__index = vec3;
local mt = {}
mt.__call = function(class_tbl, ...)
local obj = {}
setmetatable(obj, vec3);
vec3.init(obj, ...);
return obj;
end
vec3.init = function(obj, x, y, z)
obj.x, obj.y, obj.z = x, y, z;
end
setmetatable(vec3, mt);
function vec3:__tostring()
return "(" .. self.x .. ", " .. self.y .. ", " .. self.z .. ")";
end
function vec3:__add(b)
return vec3(self.x + b.x, self.y + b.y, self.z + b.z);
end
function vec3:dot(b)
return self.x * b.x + self.y * b.y + self.z * b.z;
end
私は質問は非常に明白だと思います私のC++コードでvec3を使うなど、ノードやその他のものを配置するなど、LUAプログラマがvec3で数学を行い、C++に戻すことができるようにしたいと考えています。だから私はまた、LUAでvec3を構築し、それをvec3クラスとして理解されているC++に送ることができるようにしたい。
これを達成するには、上記のLUAテーブルをLUAではなくC言語で作成する必要があると思います。それらをLUAに送信してLUAから取得するには、「プッシュ」と「ポップ」関数を作成する必要があります。
しかし、すべての試行は失敗します。
誰でも私にこれを働かせることはできますか?
ダーク。
これはおそらくはいですが、まだ使用していない多くのライブラリを私に必要としない1つのライブラリを見つける必要があります。 – scippie
AFAIKはどちらのライブラリも必要ありません。 –