【发布时间】:2016-01-19 22:53:46
【问题描述】:
假设我已经编写了一个foo<T> 函数(我有一个带有命名空间的完整签名),但现在不要介意);并假设没有其他函数重载它(在它所在的相关命名空间中)。现在让我们将自己置于运行时。假设我有字符串“foo”,对于某些类型MyType,我有typeid(MyType)(来自<memory> 标头)。
我能否以某种方式获得foo<MyType> 的符号name?
这个问题的第二个版本:现在假设我将 foo 的完整签名作为字符串,而不仅仅是名称;并放弃关于没有重载的假设。
注意事项:
- 不,我问的不是符号本身,只是名称。这将是另一个有趣的问题。
- 依赖于来自共享库的
foo<T>的答案是相关的,尽管我认为这对于符号 name 并不重要。 - 我不关心这里的性能,我会做任何事情。帮帮我 Obi Wan,你是我最后的希望等等。所以,RTTI,用奇怪的标志编译,无论如何。
- 平台相关的答案也很重要:GNU/Linux with kernel version >= 3.x , an x86_64 CPU , gcc >= 4.8 。
【问题讨论】:
-
这对于 C 和 C++ 是一样的,除非你广泛使用 RTTI,据我所知,这是一个相当不常见的选择(都是由于负面的副作用而不是真正的全部)有帮助)。
-
@MarcusMüller:实际上,我看不出这有什么关系。
-
C 和 C++ 是非反射语言。没有信息在编译后调用您的方法/函数。
-
@MarcusMüller:我知道它们是非反射语言,否则我不会对符号之类的东西感兴趣,它们是在我们从语言代码变为编译形式之后存在的......
标签: c++ symbols name-mangling