показать имя функции имя шаблона - PullRequest
1 голос
/ 18 апреля 2020

У меня есть класс-обёртка функции, над которым я пытаюсь работать.

Я хочу показать имя функции, переданной в шаблон.

template<auto Func>
struct FuncWrapper final {
    FuncWrapper() {
        StrFuncName = typeid(Func).name();
        std::cout << StrFuncName << std::endl;
    }

    template<typename... Args>
    auto operator()(Args&&... args) const { }

    std::string StrFuncName;
};

void Function() { }

FuncWrapper<Function> wrapper;

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Это невозможно со стандартным C ++. Деинсталляция typeid также не поможет, потому что вы получите только имя type функции, а не имя, которое вы фактически дали функции.

Ближайшее, что вы можете get - это предопределенная константа __func__, но она существует только внутри области действия функции, которую вы хотите получить в любом случае.

void foo()
{
    std::cout << __func__; // will print "foo"
}
0 голосов
/ 18 апреля 2020

Это невозможно в стандартном C ++, но некоторые компиляторы / библиотеки могут иметь способ обойти это.

Например, libstdc ++ для g cc имеет расширение , которое может разобрать значение typeid:

#include <cxxabi.h>

std::cout << typeid(type).name() << " -> " abi::__cxa_demangle(typeid(type).name(), 0, 0, 0) << std::endl
...