首先,我是 C/C++ 的初学者,请仁慈。
在 Node.JS 中,所有变量都是动态的,我们可以将变量转换为任何类型。因此,Node.JS 使用 C++ 编写,并且在 C++ 或 C 中没有动态变量。那么动态变量是如何实现的呢?
在 JS 中:
var A;
A = 5; //Integer
A = "Hello world!"; //String
A = 2.5; //Float
A = 5 * "Hello world!"; // I do not sure about this one.
最佳答案
有两种很好的方法。
第一个是将局部变量视为一系列值的名称。这允许您使用值,而不是变量,并且即使变量没有类型,值也具有类型。
处理该问题的一种效率较低的方法是创建多态存储,例如 boost::any
或 std::any
。就 JS 而言,只有少数基本类型,因此 boost::variant
或 std::variant
就足够了。 (复杂的 JS 对象只是无用的键值映射)。
变体
是一种标记 union 类型。数据结构有一个整数或枚举来说明存储的类型,然后是一个可以被视为任何这些类型的存储 block 。访问器检查类型,然后与数据交互,就像数据是该类型一样。
标记的 union 可以通过手动销毁数据(使用 .~X()
语法)将存储的数据替换为不同类型的数据,然后在该位置手动创建新类型(使用放置-新
语法)。在 C 中执行此操作基本相同,但语言支持稍少一些。
第一种技术 - 找出真正存在的类型并使用它 - 往往会快一个数量级(在我看到它的概要分析的情况下),因此智能脚本引擎很难工作让这一切发生。但第二个功能足够了。
现在,我不知道 node.js
是否真的被重新编译为 C/C++ 代码。但是,经过层层编译、解析和字节码之后,它将由 C/C++ 或汇编解释器进行解释,或者将自身编译为机器代码,而无需经过 C/C++ 中间步骤。无论如何,用机器代码解决这个问题与 C/C++ 的解决方案是等价的。
关于c++ - 如何在 C++ 中为 Node.JS 实现动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38568401/