У меня есть библиотека c
, к которой я привязываю, которая имеет много структур, которые содержат данные разных типов.
@[Link("foo")]
lib LibFoo
struct IntStruct
data : LibC::Int
end
struct DoubleStruct
data : LibC::Double
end
fun get_int_struct(n : LibC::SizeT) : IntStruct*
fun get_double_struct(n : LibC::SizeT) : DoubleStruct*
end
У меня есть универсальный класс, в котором я хочу, чтобы тип T
былтип одной из этих структур, основанный на входном массиве.
class GenericClass(T)
@ptr : Pointer(T)
@obj : T
def initialize(arr : Array)
@ptr = infer_type(arr)
@obj = @ptr.value
end
end
Где infer_type
выглядит так:
def infer_type(data : Array(Int32))
return LibFoo.get_int_struct(data.size)
end
def infer_type(data : Array(Float64))
return LibFoo.get_double_struct(data.size)
end
Код работает нормально, когда я явноустановить тип ...
GenericClass(LibFoo::IntStruct).new [1, 2, 3, 4, 5]
... но я бы хотел вывести тип.