0

这是我的真实问题的一个非常简化的版本,但希望以简洁的方式展示我的问题。

我的问题是关于printKeys. 我必须将要打印的数据类型作为 comptime 参数传递,最简单的方法是@TypeOf在调用它时在地图上使用。

来自 C++,这似乎有点不雅,无法推断类型,尽管我也喜欢明确。

有没有一种更惯用的方式来在 zig 中拥有一个不需要在调用时使用 @TypeOf 的通用函数,或者有更好的方式来做到这一点?

const std = @import("std");

fn printKeys(comptime MapType: type, data: MapType) void {

    var iter = data.keyIterator();
    while (iter.next()) | value | {
        std.debug.print("Value is {}\n", .{value.*});
    }
}

pub fn main() !void {
    const allocator = std.heap.page_allocator;
   
    var map = std.AutoHashMap(i32, []const u8).init(allocator);
    defer map.deinit();

    try map.put(10, "ten");
    try map.put(12, "twelve");
    try map.put(5, "five");

    printKeys(@TypeOf(map), map);
}
4

1 回答 1

1

使用anytype. 您可以在zig 文档(Ctrl + F)中找到更多示例并搜索anytype

fn printKeys(data: anytype) void {
    ...
}

pub fn main() !void {
    ...
    printKeys(map);
}
于 2022-01-08T13:02:58.110 回答