On Mon, 03 Nov 2008 01:59:56 +0300, Daniel Ribeiro Maciel <[EMAIL PROTECTED]> wrote:

How do we get a function name (string) @ compile time?

I need to do stuff like (in C)

#include <stdio.h>

#define HELLO( func ) \
  printf( "calling " #func "\n" ); \
  func();

void foo()
{
        printf( "@foo" );
}

int main()
{
        HELLO( foo );
        printf( "\n" );
}

The output is:
calling foo
@foo

Thanks in advance,
Daniel


Just in case you know little D here is the source code, explanation and comparison to C++:

import std.stdio; // this is used to import writefln() - a function similar to printf (but typesafe)

// this is a template function that takes almost anything (close to C++ templates and C macros)
void print(alias functionName)()
{
    // stringof is used to take a string representation of the identifier
    writefln("Calling ", functionName.stringof);

// let's invoke it! This will succeed if functionName is a function, pointer to function, // delegate or an object that have overloaded opCall() (similar to C++ operator())
    functionName();
}

void foo()
{
    writefln("@foo"); // same as printf("@foo);
}

void main()
{
// foo is a global (free) function. it is passed to the template function. // In C++ you would do print<foo>(); (but C++ doesn't support specializing
    // templates with functions nor does it have .stringof)
    print!(foo);
}

Reply via email to