IRaw
IRaw 的作用相当于 Interface 版的 *anyopaque
zig
pub const IRaw = struct {
ptr: *anyopaque,
vptr: *anyopaque,
};
通过 asraw() 转化为 IRaw,再通过 IRaw.cast() 转化为任意 Interface。这里没有使用类型信息,所以用户要自己保证转换的正确性。
cast
zig
pub fn cast(self: IRaw, comptime I: type) I
cast 相当于如下代码
zig
pub fn cast(self: IRaw, comptime I: type) I {
return I{.ptr = self.ptr, .vptr = @ptrCast(@alignCast(self.vptr))};
}