digitalmars.D.learn - Passing member-function to template
- Zhenya (23/23) Jan 12 2013 Hi!
- Maxim Fomin (26/29) Jan 12 2013 Probably this can help: (you can manually construct a delegate
- Zhenya (4/33) Jan 12 2013 Thank you,it really can help me.
- Maxim Fomin (5/7) Jan 12 2013 Global functions rewritten as UFCS functions are not delegates,
- Zhenya (2/9) Jan 12 2013 Understood,thank you.
Hi! Tell me please,is there any way to pass member-function to template? I need something like that: template execute(alias obj,alias mfun) { void execute() { obj.mfun(); } } struct Foo { void nothing() { } } void main() { Foo f; execute!(f,Foo.nothing)(); } I could pass mfun by string,but I think it's a little bit ugly.
Jan 12 2013
On Saturday, 12 January 2013 at 18:17:47 UTC, Zhenya wrote:Hi! Tell me please,is there any way to pass member-function to template?Probably this can help: (you can manually construct a delegate combining function and context pointers) import std.stdio; template execute(alias func) { void execute(void* ptr) { void delegate() dg; dg.funcptr = &func; dg.ptr = ptr; dg(); } } struct Foo { void nothing() { writeln("reached"); } } void main() { Foo f; execute!(Foo.nothing)(&f); }
Jan 12 2013
On Saturday, 12 January 2013 at 19:06:27 UTC, Maxim Fomin wrote:On Saturday, 12 January 2013 at 18:17:47 UTC, Zhenya wrote:Thank you,it really can help me. But I would like to handle not only member-function,but global function too(by UFCS) if it's possible.Hi! Tell me please,is there any way to pass member-function to template?Probably this can help: (you can manually construct a delegate combining function and context pointers) import std.stdio; template execute(alias func) { void execute(void* ptr) { void delegate() dg; dg.funcptr = &func; dg.ptr = ptr; dg(); } } struct Foo { void nothing() { writeln("reached"); } } void main() { Foo f; execute!(Foo.nothing)(&f); }
Jan 12 2013
On Saturday, 12 January 2013 at 19:16:02 UTC, Zhenya wrote:But I would like to handle not only member-function,but global function too(by UFCS) if it's possible.Global functions rewritten as UFCS functions are not delegates, they are still functions, so they can be handled just as other functions. In such case it is enough to supply null to void* parameter.
Jan 12 2013
On Saturday, 12 January 2013 at 19:24:04 UTC, Maxim Fomin wrote:On Saturday, 12 January 2013 at 19:16:02 UTC, Zhenya wrote:Understood,thank you.But I would like to handle not only member-function,but global function too(by UFCS) if it's possible.Global functions rewritten as UFCS functions are not delegates, they are still functions, so they can be handled just as other functions. In such case it is enough to supply null to void* parameter.
Jan 12 2013