The function signature will get long, but there’s no reason you can’t scale this up to multiple type parameters for arrays of multiple types.
struct MyData7{T, T2, T3}
arr1::Array{T, 3}
arr2::Array{T2, 3}
arr3::Array{T3, 3}
function MyData7(a::AbstractArray{T, 3}, b::AbstractArray{T2, 3}, c::AbstractArray{T3, 3}) where {
T <: Quantity{<:Float64}, T2 <: Quantity{<:Int64}, T3 <: Quantity{<:Float64} }
new{T, T2, T3}(a, b, c)
end
end
# works
# julia> MyData7(ones(Float64, (5, 5, 5))u"K", ones(Int64, (5, 5, 5))u"K", ones(Float64, (5, 5, 5))u"K")
# correctly errors
# julia> MyData7(ones(Int64, (5, 5, 5))u"K", ones(Int64, (5, 5, 5))u"K", ones(Float64, (5, 5, 5))u"K")