C++ 显示名称函数模板名称

C++ 显示名称函数模板名称,c++,c++17,C++,C++17,我有一个函数包装器类我正在努力工作 我希望能够显示传递到模板中的函数的名称 template<auto Func> struct FuncWrapper final { FuncWrapper() { StrFuncName = typeid(Func).name(); std::cout << StrFuncName << std::endl; } template<typename... Ar

我有一个函数包装器类我正在努力工作

我希望能够显示传递到模板中的函数的名称

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;
模板
结构FuncWrapper final{
FuncWrapper(){
StrFuncName=typeid(Func.name();

Std::CUT< P>这是不可能的标准C++。DeangLink的Type ID也无济于事,因为你只会得到函数的<强>类型< /强>的名称,而不是你实际赋予函数的名称。 可以得到的最接近的常量是预定义的常量,但它只存在于您希望获得其名称的函数的范围内

void foo()
{
    std::cout << __func__; // will print "foo"
}
void foo()
{

STD::CUT

标准C++中不可能,但一些编译器/库可能有办法解决这个问题。

例如,gcc的libstdc++有一个可以要求一个
typeid
值:

#包括

std::难道我不能编辑我的FuncWrapper,这样我就可以使用
#define GET_VARIABLE_NAME(VARIABLE)(#VARIABLE)
还有一个名为nameof的github示例,我认为没有任何方法可以让它在没有编译器扩展的情况下工作,因为一旦将该函数作为模板参数传入,剩下的唯一信息就是函数的类型和指向该函数的指针。我不需要在函数中输入函数名,我需要传递函数的名称,将其保存以进行设置,如果需要将其添加到构造函数中,则仅此而已。我意识到这并不是您想要的,因此我说“最接近的”。