Function name as text
Bill Baxter
dnewsgroup at billbaxter.com
Wed Dec 5 15:42:11 PST 2007
Craig Black wrote:
> "Bill Baxter" <dnewsgroup at billbaxter.com> wrote in message
> news:fj769h$7ou$1 at digitalmars.com...
>> Craig Black wrote:
>>> I have been considering porting some C++ code to D. One of the classes I
>>> would have to port is an event queue class where each event on the queue
>>> has a delegate and a text string that points to the function name that
>>> the delegate refers to. The function name is used to visualize the event
>>> queue for run-time debugging purposes. It is important to capture both
>>> the class name and the function name as text.
>>>
>>> In C++ I had a macro called DISPATCH that used the stringize operator #
>>> to capture the name of the function. The good (and bad) thing about C++
>>> in this case is that when specifying a pointer to a member, you must
>>> fully qualify the function name, so you would have something like this.
>>>
>>> class Foo {
>>> public:
>>> void bar() {}
>>> };
>>>
>>> Foo *foo = new Foo;
>>> Event event = DISPATCH(foo, &Foo::bar);
>>>
>>> Using the stringize operator, the DISPATCH macro could capture the text
>>> string "Foo::bar" as well as the member function pointer. Here is the
>>> equivalent code in D..
>>>
>>> Foo foo = new Foo;
>>> Event event = dispatch(&foo.bar);
>>>
>>> Which is much more elegant, except that I can't figure out a way to
>>> capture the name of the function and it's class. I tried fiddling with
>>> the stringof operator but that doesn't seem to work.
>>>
>>> Any ideas?
>> There probably isn't a way to do it right now without using a string
>> mixin, which uglies things up on the calling side:
>>
>> Event event = mixin(dispatch("&foo.bar"));
>>
>> Macros are supposed to give us a way to clean that up. But for now you're
>> probably better off just passing the name separately like
>> dispatch(&foo.bar, "foo");
>>
>> --bb
>
> I guess that's not so bad. It would be.
>
> Foo *foo = new Foo;
> Event event = dispatch(&foo.bar, "Foo.bar");
>
> That is probably easier on the eyes than the mixin syntax. It stilll would
> be cool if the compiler could somehow build the name automatically.
>
> Thanks for the help.
Or you could just run the C preprocessor on your source code. Mwahahaha...
--bb
More information about the Digitalmars-d
mailing list