如何为Julia中抽象类型的所有参数化子类型定义方法?

如何为Julia中抽象类型的所有参数化子类型定义方法?,julia,Julia,假设我有一个抽象基类: abstract type B end 以及许多具体的子类型: struct C1{T,V} <: B end struct C2{T,V} <: B end ... subtypes函数似乎不包含我试图查询的参数类型t和V,是否有干净的解决方案 for C in subtypes(B) # how to define result_type for C? end 只需将类型参数添加到抽象类型 abstract type B{T,V} end s

假设我有一个抽象基类:

abstract type B end
以及许多具体的子类型:

struct C1{T,V} <: B end
struct C2{T,V} <: B end
...
subtypes
函数似乎不包含我试图查询的参数类型
t
V
,是否有干净的解决方案

for C in subtypes(B)
    # how to define result_type for C?
end

只需将类型参数添加到抽象类型

abstract type B{T,V} end
struct C1{T,V} <: B{T,V} end
struct C2{T,V} <: B{T,V} end
result_type(::B{T,V}) where {T,V} = T
抽象类型B{T,V}end

结构C1{T,V}只需将类型参数添加到抽象类型

abstract type B{T,V} end
struct C1{T,V} <: B{T,V} end
struct C2{T,V} <: B{T,V} end
result_type(::B{T,V}) where {T,V} = T
抽象类型B{T,V}end

结构C1{T,V}代码在julia0.6.2上返回一个错误。我认为最后一个方法应该用
where
子句定义。谢谢你,Chris,我尝试在基类上不使用参数,但我想我必须添加参数以避免样板代码。也许是元编程的解决方案?将参数添加到基类会导致其他问题,例如无法在
struct C{T,V}中进行子类型划分。代码在Julia 0.6.2上返回一个错误。我认为最后一个方法应该用
where
子句定义。谢谢你,Chris,我尝试在基类上不使用参数,但我想我必须添加参数以避免样板代码。也许是元编程的解决方案?将参数添加到基类会导致其他问题,比如无法像
struct C{T,V}中那样进行子类型划分