QueryInterface的2义性问题!
#include<iostream>
using namespace std;
struct IUnknown
{
public:
virtual long QueryInterface(string& s, void ** ppv) = 0;
};
struct IA :public IUnknown
{
public:
virtual void Ax() = 0;
virtual void Ay() = 0;
};
struct IB:public IUnknown
{
public:
virtual void Bx() = 0;
virtual void By() = 0;
};
class CA :public IA,public IB
{
public:
void Ax(){cout<<"AX"<<endl;}
void Ay(){cout<<"AY"<<endl;}
void Bx(){cout<<"BX"<<endl;}
void By(){cout<<"BY"<<endl;}
};
long CA::QueryInterface(string &s,void **ppv)
{
if(s == "IA")
*ppv = static_cast<IA*>(this);
else if(s == "IB")
*ppv = static_cast<IB*>(this);
else if(s == "IUnknown")
*ppv = static_cast<IA*>(this);
else
{
*ppv =NULL;
return FALSE;
}
return TRUE;
}
CA *CreateInstance()
{
CA *pCA = new CA;
return static_cast<IA*>(pCA);
}
void Test(void **pt)
{
static_cast<CA*>(*pt);
}
int main(int argc, char* argv[])
{
IA *p = CreateInstance();
Test((void**)&p);
p->By();
return 0;
}
编译提示QueryInterface有2义性,但是为什么用com里自带的IUnknown就没有这个问题呢?