我很难找到有关这类东西的信息! :(
我很困惑为什么这不起作用:
vector<B*> b;
vector<C*> c;
(B and C are subclasses of A)
(both are also initialized and contain elements etc etc...)
template <class First, class Second>
bool func(vector<First*>* vector1, vector<Second*>* vector2)
return vector1 == vector2;
编译时返回:
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
我不明白为什么这不起作用,指针持有地址是啊?那么为什么不只是比较两个向量指针...指向相同的地址(-es)?
答案 0 :(得分:6)
这是一个简单的例子,你要求的东西不起作用。
struct A{ int i; };
struct OhNoes { double d; };
struct B: public A {};
struct C: public OhNoes, public B {};
所以这里,B和C都是A的子类。
但是,C
的实例不太可能与其B
子对象具有相同的地址。
就是这样:
C c;
B *b = &c; // valid upcast
assert(static_cast<void*>(b) == static_cast<void *>(&c));
会失败。
答案 1 :(得分:4)
你的两个向量是不同的类型,你无法比较它们。
如果你想检查你没有调用func(b,b),那么你可以尝试:
template <typename T> bool func(vector<T> const & a, vector<T> const & b)
{
if (&a == &b) return false;
// do stuff
return true;
}
除非你做了一些非常奇怪的事情,否则指向不同类型的两个向量的指针将不相等。如果您尝试使用两个不同类型的向量调用func,则会出现编译器错误。