On 02.05.23 14:52, Quirin Schroll wrote:
How do I invoke the member function in a reliable way? Given `obj` of
the type of the object, I used `mixin("obj.", __traits(identifier,
memberFunc), "(params)")`, but that has issues, among probably others,
definitely with visibility. (The member function alias is a template
parameter.)
Construct a delegate from the alias and the object, and call that delegate:
----
class C
{
int field = 42;
void method() { import std.stdio; writeln(field); }
}
void fun(alias method)(C c)
{
void delegate() dg;
dg.funcptr = &method;
dg.ptr = cast(void*) c;
dg();
}
void main()
{
fun!(C.method)(new C); /* prints "42" */
}
----