-1

I want to write

ProgressFunction.BindUFunction(this, NAMEOF(&MyActor::HandleProgress));

instead of

ProgressFunction.BindUFunction(this, "HandleProgress");

where BindUFunction's second parameter can only accept TCHAR*.

Question

How to define NAMEOF macro to convert &Whatever::FunctionName to "FunctionName"?

1 Answers1

4

You could stringify the argument and find the last : in it.

#include <cstring>
#include <iostream>
#define NAMEOF(x)   (strrchr(#x, ':') ? strrchr(#x, ':') + 1 : #x)
int main() {
    std::cout << NAMEOF(&MyActor::HandleProgress);
}

This is very similar to https://stackoverflow.com/a/38237385/9072753 .

KamilCuk
  • 120,984
  • 8
  • 59
  • 111