我有一个函数类方法ValueHolder::printValue

class ValueHolder {

public:
    void printValue ();
} ;

如何在编译时(或运行时)确定错误的名称。

例如,我想这样做:
const char *mangled_name = GetMangledNameOfSymbol(&ValueHolder::printValue);

该函数可能返回类似以下的字符串:
"_ZN11ValueHolder10printValueEv"

按照@MarcoA。先决条件是现代编译器。一个支持typeid并启用了此功能的标志。

我还将接受一个对Gcc和Clang实用的答案,以及一个MSVC的存根。

最佳答案

根据[lib.type.info],没有标准的方法可以做到这一点



对于您的编译器实现,您可以使用typeid(type/expression).name(),但是在此名称的修饰处(在实现中定义)没有指定或强制执行。这也取决于所使用的编译标志(感谢malat)。

例:

class ValueHolder {

public:
  void printValue();
};


int main() {
  std::cout << typeid(&ValueHolder::printValue).name();
}

gcc7.0



clang4.0



MSVC14

关于c++ - 在编译时(或运行时)获取c++函数错误的名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40806790/

10-11 01:05