I think the most elegant way to satisfy both crowds (OOP and anti-OOP) is to use something like this:

https://gist.github.com/rjmcguire/6431542

void foo(T)(T someSet) if (Implements!(T, Set))
{
}

foo will accept any class implementing interface "Set", any struct having the same methods as the interface "Set", and any other type having equivalent UFCS for "Set" members.

So, the OOP crowd will write classes implementing Set, the anti-OOP crowd will create structs and finally, the hardcore programming crowd will be happy using UFCS. Everybody is happy.

Of course, it would be nice if the compiler is doing this behind the scenes by accepting interface implementation for structs so I can write void foo(Set someSet) for any class, interface or struct implementing Set. C# is doing this by boxing the struct/value type, but I think the D compiler could be smarter than that.

Reply via email to