b88d05a4创建于 2024年9月15日历史提交

绑定枚举类型

JSBind语法糖JSBIND_ENUMJSBIND_ENUM_VALUE支持绑定 C/C++ 枚举类型,映射为 JavaScript 的Number类型。

  • C/C++侧默认枚举类型为POD中的int32_t;
  • JavaScript侧对应的枚举类型属性为readonly

JSBIND_ENUM(enum)

参数:

参数名 类型 必填 说明
enum enum Y 被绑定的C++枚举类型。

JSBIND_ENUM_VALUE(value)

参数:

参数名 类型 必填 说明
value enum::value Y 被绑定的C++枚举值。

示例:

  • C++
#include <string>
#include <aki/jsbind.h>

enum TypeFlags {
    NONE,
    NUM,
    STRING,
    BUTT = -1
};

JSBIND_ENUM(TypeFlags) {
    JSBIND_ENUM_VALUE(NONE);
    JSBIND_ENUM_VALUE(NUM);
    JSBIND_ENUM_VALUE(STRING);
}

TypeFlags Passing(TypeFlags flag) {
    return flag;
}

JSBIND_GLOBAL()
{
    JSBIND_FUNCTION(Passing);
}

JSBIND_ADDON(enumeration);
  • JavaScript
import libAddon from 'libenumeration.so' // 插件名


console.log('AKI libAddon.TypeFlags.NONE = ' + libAddon.TypeFlags.NONE);
console.log('AKI libAddon.TypeFlags.NUM = ' + libAddon.TypeFlags.NUM);
console.log('AKI libAddon.TypeFlags.Passing() = ' + libAddon.Foo(libAddon.TypeFlags.STRING));
try {
  libAddon.TypeFlags.NUM = 10; // TypeError: Cannot set readonly property
} catch (error) {
  console.error('AKI catch: ' + error);
}