I have the following repetitive code structure.
mutable struct SC011 state::SCBit info::String nin::Int nout::Int SC011() = new(false, "(1-λ₁)/(1-λ₁λ₂)", 2, 1) end Base.broadcastable(g::SC011) = Ref(g) function proc(g::SC011, b1::SCBit, b2::SCBit) if !(ismissing(b1) || ismissing(b2)) g.state = !b1 | g.state & b2 return g.state end handle_missing_two_inputs("SC011", b1, b2) end
… plus a few other methods defined for
I have dozens of these to implement, where the only change from one type to the next is the type name
SC011, the string
"(1-λ₁)/(1-λ₁λ₂)", and the expression
!b1 | g.state & b2.
It would obviously be great to automate all this. I was hoping
@generated would be the key, but it seems macros can’t be used to define a new type. Maybe I just don’t know what I’m doing. I remember seeing a blog post where someone automated a lot of boilerplate code using reasonably simple metaprogramming, but I can’t find it now and I’m not sure if it’s relevant here.
Is automating this possible, and if so can anyone provide a pointer to a similar example please? Many thanks.