Как передать имя вызывающей функции в вызываемую функцию, используя параметры по умолчанию - PullRequest
0 голосов
/ 16 января 2020

Рассмотрим код ниже:

#include <iostream>

void test_function(const char* caller_name = __FUNCTION__) {
  std::cout << caller_name << " ";
}

void func1() {
  test_function();
}

int main() {
  test_function();
  func1();
}

Код выше ничего не печатает. Есть ли способ, которым test_function выводит имя функции, из которой она вызывается?
Например: для этого случая вывод должен быть следующим: main func1

Я понимаю, что желаемый результат может быть достигнут, если мы сделаем аргумент test_function, не по умолчанию и передадим __FUNCTION__ из функции вызывающей стороны.
Этого можно достичь и с помощью макроса, но это не то, что я ищу.

1 Ответ

4 голосов
/ 16 января 2020

Использовать макрос

#define TEST_FUNCTION() test_function(__FUNCTION__)

void test_function(const char *caller) {
  std::cout << caller << '\n';
}

void foo() {
  TEST_FUNCTION(); // prints foo
}

int main() {
  TEST_FUNCTION(); // prints main
  foo();
}
...