如何在zig中的结构体字段中进行泛型

问题描述 投票:0回答:1

我对 zig 很陌生,我想知道如何创建一个可以具有编译时已知类型的结构体字段

例如,与函数参数一起使用时类似于

comptime
关键字的东西,我想对作为数组的结构体字段执行相同的操作

函数中

comptime
的示例:

fn exampleFn(comptime t: type, allocator: std.mem.Allocator) ![]t {
    var array: []t = try allocator.alloc(t, 3);
    return array;
}

在这里我可以指定任何类型作为输出数组的类型(这是我能想到的最好的例子)

我想要做的事情的例子:

const List = struct {
    content_type: type,
    data: ?[].content_type,
};

有什么方法可以让我做这样的事情并且仍然能够在运行时使用该结构吗?

generics struct zig
1个回答
6
投票

Zig 通过返回类型的函数来实现泛型

const std = @import("std");

fn Foo(comptime value_type: type) type {
    return struct {
        value: value_type,
    };
}

const FooU8 = Foo(u8);

pub fn main() void {
    var foo = FooU8{
        .value = 1,
    };
    // foo.value = 257; // error: type 'u8' cannot represent integer value '257'
    std.log.info("{}", .{ foo.value });
}
© www.soinside.com 2019 - 2024. All rights reserved.