I want to write an interface that expresses the following idea: "classes 
implementing this interface must have a void function named update, with a 
fixed but indeterminate number of parameters of the same (template parameter) 
type."  In other words, some implementing classes will have void update(T a), 
some void update(T a, T b), etc.  Admittedly, this kind of defeats the purpose 
of an interface, but I thought I would try to hack around it anyhow.  :)

Option 1: put lots of update() functions in the interface, one with each 
possible number of parameters; implement every one in every derived class; and 
spew some static asserts if you try to use the wrong ones.  Yuck.

Option 2: variadic functions: declare void update(T[] params ...) in the 
interface, and try to specialize to a fixed number of parameters in 
implementing classes.  D doesn't want to let me do this literally, and 
params.length nor _arguments.length are static constants -- though it seems 
like they could be.  I want to catch calls with the wrong number of arguments 
at compile time.

Option 3: variadic templates: declare void update(P...)(P args) in the 
interface, and then define what you like in implementing classes.  This works, 
but too well: there doesn't seem to be any way to constrain the type of the 
arguments, which I would like the interface to do.

Other options?  Is there a way to do this?


Reply via email to