不同dll的typeid结果

时间:2010-06-25 12:41:14

标签: c++ dll templates typeid

我有两个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 ??? etc” 而name2可能是“??? A ?? TEMPLATE_LIST_OF_A等”。

这实际上对我来说很有意义,但是有一种方法,只要有 使用的名称是相同的,以保证name1 == name2?

感谢, 抢劫

3 个答案:

答案 0 :(得分:3)

不仅没有办法保证typeid().name()在不同的DLL中是相同的,标准几乎不能保证返回的字符串。具体而言,不保证a)有意义,b)对于不同类型是唯一的,c)对于相同类型是相同的。

作为一个实施质量问题,您可以假设这三个条件成立,但特别是对于复杂的模板类型,如果您能找到在特定编译器中违反它们的情况,我不会感到惊讶。

98标准的相关部分是5.2.8和18.5.1

答案 1 :(得分:0)

不,实际上有不同的类型(在我看来)。

同样是typeid()。name()是特定于编译器的。

答案 2 :(得分:0)

如果两个DLL使用完全编译相同的OS,编译器和编译器选项,那么typeid似乎可能是相同的。