tvm::runtime::ObjectRef

目录

tvm::runtime::ObjectRef#

tvm::runtime::ObjectRef 是所有 tvm::runtime::Object 引用的基类。以下是对代码中各部分的解释:

  • ObjectRef() = default;:这是默认构造函数,用于创建一个空的对象引用。

  • explicit ObjectRef(ObjectPtr<Object> data) : data_(data) {}:这是一个显式的构造函数,用于通过现有对象指针创建一个对象引用。它接受一个类型为 ObjectPtr<Object> 的参数 data,并将其赋值给成员变量 data_

  • bool same_as(const ObjectRef& other) const:这个成员函数用于比较两个对象引用是否相同。它接受一个类型为 const ObjectRef& 的参数 other,并返回一个布尔值表示它们是否相等。

  • bool operator==(const ObjectRef& other) const:这个成员函数重载了等于运算符 ==,用于比较两个对象引用是否相等。它也接受一个类型为 const ObjectRef& 的参数 other,并返回一个布尔值表示它们是否相等。

  • bool operator!=(const ObjectRef& other) const:这个成员函数重载了不等于运算符 !=,用于比较两个对象引用是否不相等。它也接受一个类型为 const ObjectRef& 的参数 other,并返回一个布尔值表示它们是否不相等。

  • bool operator<(const ObjectRef& other) const:这个成员函数重载了小于运算符 <,用于比较两个对象引用的顺序。它也接受一个类型为 const ObjectRef& 的参数 other,并返回一个布尔值表示当前对象引用是否小于另一个对象引用。

  • bool defined() const:这个成员函数用于检查对象引用是否已定义(即不为 nullptr)。它返回一个布尔值表示对象引用是否已定义。

  • const Object* get() const:这个成员函数返回内部对象指针。它是一个常量指针,指向 Object 类型的对象。

  • const Object* operator->() const:这个成员函数返回内部对象指针的箭头操作符。它也是一个常量指针,指向 Object 类型的对象。

  • bool unique() const:这个成员函数用于检查对象引用的唯一性。它返回一个布尔值表示对象引用是否是唯一的。

  • int use_count() const:这个成员函数返回对象的使用计数(用于调试目的)。它返回一个整数值表示对象的使用计数。

此外,该类还定义了一些其他成员函数和成员变量,包括模板函数 as()DowncastNoCheck()、静态成员变量 _type_is_nullable、保护成员变量 data_ 等。这些函数和变量提供了对对象引用进行操作和获取相关信息的功能。

as#

template <typename ObjectType, typename = std::enable_if_t<std::is_base_of_v<Object, ObjectType>>>
  inline const ObjectType* as() const;

as 函数的作用:

  • 尝试将内部对象 ObjectRef 转换为相应类型的原始指针。

  • 如果转换失败,函数将返回空指针。

  • 目标类型为 ObjectType,必须是 Object 的子类型。

函数使用了模板参数 ObjectType 和默认参数std::enable_if_t<std::is_base_of_v<Object, ObjectType>>>。模板参数用于指定要转换的目标类型,而默认参数则用于在编译时检查目标类型是否为 Object 的子类型。

函数的返回类型是 const ObjectType*,表示返回指向常量的原始指针。

总结起来,函数模板 as,用于将内部对象 ObjectRef 转换为目标类型 ObjectType 的原始指针。如果转换失败,函数将返回空指针。