Call function by its string name

aldanor i.s.smirnov at gmail.com
Sat Oct 19 10:42:26 PDT 2013


On Saturday, 19 October 2013 at 17:35:53 UTC, John Colvin wrote:
> On Saturday, 19 October 2013 at 17:17:47 UTC, aldanor wrote:
>> On Saturday, 19 October 2013 at 16:56:50 UTC, John Colvin 
>> wrote:
>>> On Saturday, 19 October 2013 at 16:33:11 UTC, aldanor wrote:
>>>> I was wondering if it was possible to call D functions by 
>>>> their names (strings that are not known at compile time) and 
>>>> couldn't find the answer anywhere in the documentation. 
>>>> Kinda like we can instantiate objects with Object.factory, 
>>>> would it be possible to somehow do the same with 
>>>> module-level functions? Or maybe with non-static class 
>>>> methods?
>>>
>>> You could make an associative array of function pointers with 
>>> strings as keys. Probably not the best solution but it should 
>>> work.
>>
>> Thanks for the reply, this is something I thought about of 
>> course. But what if I have hundreds of functions to dispatch 
>> to? The current (C) implementation does exactly that, 
>> autogenerates a sort of an associative array, but that's very 
>> ugly and requires an extra preprocessing step.
>>
>> I was thinking runtime reflections can help do this, but I'm 
>> not quite sure where to start (and there is also the 
>> performance question).
>
> No matter what happens, if you want to take a runtime string 
> and work out what function it corresponds to then you're going 
> to have to use some sort of string matching.
>
> Unless you have a very specific function name format then a 
> hash is probably the fastest way to do this, especially in the 
> case of hundreds of functions.
>
> D's compile-time reflection could probably make building the 
> associative array neat and easy.

Yes, in my case it's very specific, let's say I receive a string 
"fun" and want to call do_fun(args) or Obj.do_fun(args). Thanks, 
I'll try looking into compile-time reflection.


More information about the Digitalmars-d mailing list