我有两个 dll,它们都声明了一个模板化类型,让我们调用 A. 如果 A 的声明足够复杂,则碰巧 在两个不同的函数中调用 typeid(A).name() 的结果是不同的 dll 的。
例子:
DLL1:
struct MyType: public A< TEMPLATE_LIST_OF_A >{}
void f(){
std::string name1 = typeid(A).name();
}
DLL2:
struct MyType: public A< TEMPLATE_LIST_OF_A >{}
void f(){
std::string name2 = typeid(A).name();
}
例如 name1 可能是这样的:“???MyType???等” 而 name2 可能是“???A??TEMPLATE_LIST_OF_A 等”。
这对我来说实际上很有意义,但是有没有办法,只要 使用的名称相同以保证 name1==name2 ?
谢谢, 抢劫
最佳答案
不仅没有办法保证 typeid().name()
在不同的 DLL 中是相同的,标准几乎不保证返回的字符串。具体来说,它不能保证 a) 有意义,b) 对不同类型是唯一的,c) 对于相同类型是相同的。
作为实现质量问题,您可能会假设这三个条件成立,但特别是对于复杂的模板类型,如果您发现在特定编译器中违反它们的情况,我不会感到惊讶。
98标准的相关部分是5.2.8和18.5.1
关于c++ - 跨不同 dll 的 typeid 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3118039/