Есть ли способ преобразовать переменную функции в строку в D? - PullRequest
6 голосов
/ 21 июня 2011

Есть ли способ, учитывая переменную функции, получить имя функции в виде строки? Например, если у меня есть:

void function(int) func;

Есть ли какая-нибудь функция x (), которую я мог бы получить:

x(func) == "func";

? Я чувствую, что это было бы возможно с использованием миксинов, но я не совсем понимаю, как это реализовать.

Ответы [ 2 ]

7 голосов
/ 21 июня 2011
func.stringof

- это то, что вам нужно.

Вы также можете сделать шаблон:

template Name(alias Func) { enum Name = Func.stringof; }

void func() { }
pragma(msg, Name!(func));    //prints func()
0 голосов
/ 21 июня 2011

Самое простое решение, которое приходит мне в голову:

Вы можете сохранить его имя в виде строки и mixin 'редактировать в случае необходимости что-то вроде:

string func_name = "func";
...
int param = 294;
mixin(func_name ~ "(" ~ to!string(param) ~ ")");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...