我有一个函数类方法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/