Насколько я понимаю, я не думаю, что распределители, доступные в настоящее время в языке (0.6.0 на момент написания), которые обычно требуют параметра типа «comptime», в настоящее время позволяют это.
Из текущей документации, относящейся к comptime
, относительно типа type
:
В Zig типы — граждане первого класса. Их можно присваивать переменным, передавать в качестве параметров функциям и возвращать из функций. Однако их можно использовать только в выражениях, которые известны во время компиляции, поэтому параметр T в приведенном выше фрагменте должен быть помечен comptime.
Это похоже на то, что должно быть возможно, поскольку я думаю, что type
должен иметь размер, и вы, вероятно, могли бы выделить структуру, которая могла бы его удерживать.
Похоже, что выделение comptime
— это вариант использования, который может поддерживаться в следующих версиях: https://github.com/ziglang/zig/issues/1291, но я не уверен, как это будет взаимодействовать с type
.
Я новичок в Zig, поэтому, надеюсь, кто-то даст более полный ответ = D
Изменить: я уверен, что это не тот вопрос, который вы задаете, но если, как в приведенном выше примере, вы сохраняете в списке только объекты одного типа, я думаю, вы может что-то сделать с дженериками?
e.g.
const std = @import("std");
pub fn main() anyerror!void {
const cw = ContentWrapper(MyType);
var list = std.ArrayList(cw.Content).init(std.heap.page_allocator);
try list.append(cw.Content{ .content = MyType{ .id = 1, .property = 30 }, .name = "First" });
try list.append(cw.Content{ .content = MyType{ .id = 2, .property = 10 }, .name = "Second" });
}
const MyType = struct {
id: u8, property: f32
};
fn ContentWrapper(comptime T: type) type {
return struct {
pub const Content = struct {
content: T, name: []const u8
};
};
}
person
Chris
schedule
16.10.2020