digitalmars.D - Casting functions to delegates
- Matthias Walter (12/12) Dec 11 2010 Hi all,
- Craig Black (14/14) Dec 11 2010 Not sure if this is the de facto answer, but I found this one from back ...
- Dmitry Olshansky (7/19) Dec 12 2010 There is actually almost forgotten function in std.functional -
- Matthias Walter (2/23) Dec 12 2010 Ah, thank you very much! That looks like what I was looking for.
Hi all, there was a discussion in 2006 but w/o a result, and I didn't find any bugs about implicitely casting functions to delegates. It seems to be impossible as long as function-pointer calls work differently than delegate calls in the ABI. Will this at some point be fixed? If not, is there a conversion function in phobos (I didn't find one)? I played a bit and found that this one might work: R delegate(A) funcionToDelegate (R, A...) (R function(A) func) { return (A a){ return func(a); }; } Matthias
Dec 11 2010
Not sure if this is the de facto answer, but I found this one from back in the day. R delegate(T) toDg(R, T...)(R function(T) fp) { struct dg { R opCall(T t) { return (cast(R function(T)) this) (t); } } R delegate(T) t; t.ptr = fp; t.funcptr = &dg.opCall; return t; } -Craig
Dec 11 2010
On 12.12.2010 7:25, Matthias Walter wrote:Hi all, there was a discussion in 2006 but w/o a result, and I didn't find any bugs about implicitely casting functions to delegates. It seems to be impossible as long as function-pointer calls work differently than delegate calls in the ABI. Will this at some point be fixed? If not, is there a conversion function in phobos (I didn't find one)? I played a bit and found that this one might work: R delegate(A) funcionToDelegate (R, A...) (R function(A) func) { return (A a){ return func(a); }; } MatthiasThere is actually almost forgotten function in std.functional - toDelegate, which does it in the most general way, functional objects covered. Sadly enough it's not listed in docs, because of the auto return. -- Dmitry Olshansky
Dec 12 2010
On 12/12/2010 06:15 AM, Dmitry Olshansky wrote:On 12.12.2010 7:25, Matthias Walter wrote:Ah, thank you very much! That looks like what I was looking for.Hi all, there was a discussion in 2006 but w/o a result, and I didn't find any bugs about implicitely casting functions to delegates. It seems to be impossible as long as function-pointer calls work differently than delegate calls in the ABI. Will this at some point be fixed? If not, is there a conversion function in phobos (I didn't find one)? I played a bit and found that this one might work: R delegate(A) funcionToDelegate (R, A...) (R function(A) func) { return (A a){ return func(a); }; } MatthiasThere is actually almost forgotten function in std.functional - toDelegate, which does it in the most general way, functional objects covered. Sadly enough it's not listed in docs, because of the auto return.
Dec 12 2010