I was wondering whether composite type field overloading (introduced in 0.7) could be used to “flatten” access to composed data structures. There has been much discussion about inheritance vs composition, and I was hoping to use composition but access the fields directly, as if inherited.
An example probably helps explain what I mean.
The following works but is probably too slow. Is there a way to make this work efficiently?
struct Foo
a::Int
b::Int
end
struct Bar
foo::Foo
c::Int
d::Int
end
function Base.getproperty(x::Bar, f::Symbol)
if f in fieldnames(Foo)
getfield(x.foo, f)
else
getfield(x, f)
end
end
foo = Foo(1,2)
bar = Bar(foo,3,4)
bar.a
bar.b
bar.c
bar.d