On Mon, Jun 27, 2016 at 08:13:21PM -0700, H. S. Teoh via Digitalmars-d-learn wrote: > On Tue, Jun 28, 2016 at 01:41:03AM +0000, Smoke Adams via Digitalmars-d-learn > wrote: > > I have a type > > > > public class SuperFunction(T) > > { > > T t; > > return(T) Do() { return t(); } > > } > > > > where T is a delegate or function. First, I would like to be able to > > specify that this must be the case for SuperFunction so we can't pass > > non-function/delegates for T. [...] > Maybe this? > > import std.traits : ReturnType, Parameters; > > ReturnType!T Do(Parameters!T args) { return t(args); } [...]
Actually, we can do even better by using opCall: ReturnType!T opCall(Parameters!T args) { return t(args); } Then you can call the object directly: auto sf = new SuperFunction!someFunc; auto ret = sf(x, y, z); T -- Кто везде - тот нигде.