为使用 Alchemy 转换的C++类创建 AS3 代码(一个 là Box2D)
Creating AS3 code for C++ classes converted with Alchemy (a là Box2D)
所以我有一个c++类的集合,我现在已经很好地将炼金术转换为swc文件,并且可以从我的AS3代码中调用暴露的函数。
我真正想做的是重建像Box2D的b2Vec这样的东西。类,
public class b2Vec2 extends b2Base {
public function b2Vec2(p:int) {
_ptr = p;
}
public function get v2():V2 {
return new V2(x, y);
}
public function set v2(v:V2):void {
x = v.x;
y = v.y;
}
public function get x():Number { return mem._mrf(_ptr + 0); }
public function set x(v:Number):void { mem._mwf(_ptr + 0, v); }
public function get y():Number { return mem._mrf(_ptr + 4); }
public function set y(v:Number):void { mem._mwf(_ptr + 4, v); }
}
这是一个简单的例子,但显示了我想要做的事情。在C语言方面,b2Vec2是一个结构体,
/// A 2D column vector.
struct b2Vec2
{
/// Default constructor does nothing (for performance).
b2Vec2() {}
....
float32 x, y;
};
因此,对于这个结构体,很容易计算出b2Vec2对象的第一个变量是浮点数,它将是x中的值,可以通过Alchemy的MemUser类_mrf(从内存中的点读取浮点数)用_mrf(pointerAddress)读取,你可以用_mrf(pointerAddress + 4)读取第二个浮点数。
我的问题是,如果你不是一个c++专家(我),有什么方法可以得到一个类的定义,如在所有变量的地址和他们是什么?所以,对于b2Vec2,我想象它是这样的,Float32 x 0Float34 y 4…
我问这个问题的原因是因为其中一个类特别有很多变量,并且要尝试获取每个变量的信息,以便我可以直接从AS3代码访问它,这将是大量的工作,我将假设我将引入大量的人为错误。
一般的c++答案是否定的。在运行时,您无法发现特定结构体的成员变量是什么。
如何在c++应用程序中添加反射?
我不知道炼金术编译代码看起来像什么。您可以构建一些工具/预处理器来从其他表示生成c++类或结构,然后该工具也可以生成您的AS3访问器-这将是消除用户错误和一些工作的一种方式。这可能很棘手,因为计算成员变量的地址并不总是那么简单。
如果你可以在c++类中调用成员函数,为什么不把get/set函数移到那里并调用它们呢?
我从WCK的Jesse Sternberg那里得到了一个足够好的答案。他让他的大多数AS3类与c++类配对,在构建过程中自动在他自己的"探针"文件夹中完成。在这里,有一个box2dc类,它在顶部定义了一组模板,然后在main函数中,探测类的成员变量,并打印出从该端访问它们的相关AS3代码。
这是有点古怪的习惯,但肯定非常方便,比手动做得好得多!
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 在Qt/C++中从一个代码构建两个略有不同的项目
- 编写一个代码,使年利率翻倍
- G++ 发出警告,要求删除一个代码的数组,但不删除另一个代码的数组
- 我正在编写一个代码来将 int 数组存储在文件中,然后用 c++ 检索它,但是检索第一项是假值,我该如何解决这个问题?
- 我想制作一个代码,将C 中的单个数字值分开.例如:12345 = 1 2 3 4 5
- 我已经编写了一个代码来查找数组元素的反向,但它没有给出所需的输出
- 循环在此代码中仅迭代一次,而在另一个代码中正确迭代
- 我需要编写一个代码,从用户那里获取输入(句子)并停止在@处
- 我试图编写一个代码来查找一个单词是否是回文,但它不起作用。怎么了?
- 我不知道为什么只有一个代码在两个代码之间具有sigsegv(看起来相同)
- 编写一个代码,该代码在给定的链表中将删除具有奇数值的元素
- 查找哪个代码段比另一个代码段快
- 我正在编写一个代码,该代码从用户那里为公司中的五个项目输入数量
- 如果我制作一个代码,每个线程都会修改数组的完全不同的部分,则将保持缓存相干性
- 为什么下一个代码不编译
- 卡在测试'if':另一个代码的一部分
- 我有一个 c++ 代码,它在启动时崩溃,然后到达问题所在 main() 的执行
- C++语法谁呼吁一个代码块-简化工作
- 两个类相互包含,下一个代码有什么问题?