function pointer bug?

Kapps via Digitalmars-d digitalmars-d at puremagic.com
Tue Oct 28 00:53:03 PDT 2014


On Tuesday, 28 October 2014 at 02:34:14 UTC, ketmar via 
Digitalmars-d wrote:
> On Tue, 28 Oct 2014 01:36:01 +0000
> bitwise via Digitalmars-d <digitalmars-d at puremagic.com> wrote:
>
>> I have actually found a work around as well, which was to wrap 
>> the actual retrieval of the function address in a lambda, and 
>> pass the lambda by template parameter instead:
> it's not a "workaround", it's almost exactly what i did in my 
> sample,
> just not that hairy.
>
> you can't get address of anything in compile time, 'cause there 
> is no
> such address. but you can do it in runtime, of course. that's 
> what you
> doing: postponing "&" to runtime.
>
>> as far as I could google, no one has attempted this yet.
> no one published it yet, not "no one attempted". i desperately 
> need
> runtime reflection for my (still private) component builder 
> project, so
> i'm slowly writing that mechanics. and my "command console" 
> using
> similar technique to allow user inspect variables and classes, 
> and call
> function/methods in runtime.

I do something possibly similar for generating console help text 
using runtime reflection. It could have used compile-time 
reflection, but it gets annoying to use.

Using 
https://shardsoft.com/stash/projects/SHARD/repos/dap/browse/source/dap/Standalone.d 
(with 
https://shardsoft.com/stash/projects/SHARD/repos/shardtools/browse/source/ShardTools/CommandLine.d 
and 
https://shardsoft.com/stash/projects/SHARD/repos/shardtools/browse/source/ShardTools/Reflection.d?until=45ded3019f3f05d7b68e5746d34da1de7433ccf6), 
it generates something like:

D Asset Pipeline
Converts assets into an intermediate post-processed format more 
efficiently loaded at runtime.
Commands:
         [-h|--help]: Displays the help string.
         [-a|--add]: Adds the given raw asset to the asset store 
using the default processor and default settings.
         [-r|--remove]: Removes the asset with the specified 
qualified name from the asset store.
         [-l|--list]: Lists all assets currently stored.
         [-b|--build]: Builds all dirty assets using current 
settings.
         [-i|--inspect]: Shows all properties of the given asset.
         [-m|--modify]: Modifies a property of a processor on an 
asset, or the processor used to build the asset.
Options:
         [--input-folder]: The folder that assets should be read 
from and settings stored in. Default: Content\Input
         [--output-folder]: The folder that generated assets 
should be saved to. Default: Content\Output
         [--log-level]: The minimum severity for a message to be 
logged. Default: info


The command lines then invoke methods registered through runtime 
reflection, which allow the user to change individual properties 
on the set processor using --modify, again using runtime 
reflection to find the setting that the user wants and converting 
their input to the appropriate type.


More information about the Digitalmars-d mailing list