7.3. 泛型参数 Arg

    7.3.2. 概述

    1. arg 中可以保存一个任意类型的值。

    2. arg 支持的类型有:int,float,pointer, string, null, bytes。

    3. arg 放入对象后,可以直接在 python 脚本中访问 arg 的值。

    泛型参数的数据类型是 Arg。

    1. struct Arg {
    2. Arg* next;
    3. uint32_t size;
    4. uint8_t type;
    5. Hash name_hash;
    6. uint8_t content[];

    注意不要直接访问arg 内部的成员,请使用arg API访问arg 。以获得最大的向后兼容性

    7.3.4. 泛型参数的新建和销毁

    • 新建泛型参数

    从堆中新建一个泛型参数,返回泛型参数的指针。

    注意新建的泛型参数需要手动销毁来回收内存。不断新建泛型参数但不销毁会导致内存泄漏。

    [注意] 下列 api 需要内核版本不低于 v1.9.2

    • 销毁泛型参数。
    1. void arg_deinit(Arg* self);
    • 复制泛型参数

    传入泛型参数的指针,销毁泛型参数。

    使用以下API可以判断泛型参数的当前类型。

      使用以下的API可以将泛型参数转换为基本类型。

      7.3.6. 重要注意事项

      直接使用 arg_new<Type>() api 极易引起 内存泄漏或悬垂引用,导致 致命缺陷

      使用 arg 构建一个字符串列表

      1. #include "PikaStdData_List.h"
      2. ...
      3. /* 创建 list 对象 */
      4. PikaObj* list = newNormalObj(New_PikaStdData_List);
      5. PikaStdData_List___init__(list);
      6. /* 用 arg_new<type> 的 api 创建 arg */
      7. Arg* str_arg1 = arg_newStr("aaa");
      8. /* 添加到 list 对象 */
      9. PikaStdData_List_append(list, str_arg1);
      10. /* 销毁 arg */
      11. ...