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示例,我认为没有任何方法可以让它在没有编译器扩展的情况下工作,因为一旦将该函数作为模板参数传入,剩下的唯一信息就是函数的类型和指向该函数的指针。我不需要在函数中输入函数名,我需要传递函数的名称,将其保存以进行设置,如果需要将其添加到构造函数中,则仅此而已。我意识到这并不是您想要的,因此我说“最接近的”。