On Sun, 18 Aug 2019 19:17:16 +0000, Andrey wrote: > Here in tester I want to alias a template method and call it on object > if this object isn't null. But I don't understand how to do it. > How to solve the problem?
I don't think you can alias an object method directly; three methods I know of: --- struct Struct { void run(int number) { import std.stdio; writeln("run ", number); } } // Pass the object itself. void func1(alias obj)(int number) if (isFunction!(obj.run)) { obj.run(number); } // Pass the object and the name of the method. void func2(alias obj, string method)(int number) if (__traits(compiles, "obj." ~ method ~ "(number);")) { mixin("obj." ~ method ~ "(number);"); } // Pass the method at runtime. void func3(void delegate(int) f, int number) { f(number); } void main() { Struct obj; func1!(obj)(1); func2!(obj, "run")(2); func3(&obj.run, 3); } --- Also, you don't want to name something "Object"; the base class is called Object -- the struct shadows it but you may run into some bug or confusion later. --Ryan