这是我的真实问题的一个非常简化的版本,但希望以简洁的方式展示我的问题。
我的问题是关于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);
}