digitalmars.D - Casting functions to delegates
- Matthias Walter <xammy xammy.homelinux.net> Dec 11 2010
- "Craig Black" <craigblack2 cox.net> Dec 11 2010
- Dmitry Olshansky <dmitry.olsh gmail.com> Dec 12 2010
- Matthias Walter <xammy xammy.homelinux.net> Dec 12 2010
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); }; } Matthias
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: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
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









"Craig Black" <craigblack2 cox.net> 