C++ 复杂继承情况下的模糊函数调用

C++ 复杂继承情况下的模糊函数调用,c++,inheritance,ambiguous,C++,Inheritance,Ambiguous,我有以下代码:- #include <iostream> #include <vector> using namespace std; template <typename I> class A { public: void f (I* i) { lis.push_back(i); } vector <I*> lis; }; class B { public: int b; }; clas

我有以下代码:-

#include <iostream>
#include <vector>

using namespace std;

template <typename I>
class A {
  public:
    void f (I* i) {
      lis.push_back(i);
    }
    vector <I*> lis;
};

class B {
  public:
    int b;
};

class C {
  public:
    double c;
};

class D : public A<B>,
          public A<C> {
  public:
    void g () {
      cout<<"g\n";
    }
};

class E : public B, public C {
  public:
    float e;
};

int main() {
  E* e;
  D d;
  B* b = (B*) e;
  d.f (b);
}
#包括
#包括
使用名称空间std;
模板
甲级{
公众:
无效f(I*I){
lis.推回(i);
}
病媒lis;
};
B类{
公众:
int b;
};
C类{
公众:
双c;
};
D类:公共A,
公共的{
公众:
空g(){
D类:公共A,
公共的{
公众:

使用A::f;//我认为如果
b
实际上是A
b*
而不是铸造的
E*
,歧义就会消失。你可能有一个(好的?)需要
E
类的原因,尽管如此。仅供参考,您可以用一个更简单的测试用例引发这个问题;请参阅。@jpm是的,需要E有一个很好的原因。基本上,B&C是接口。@OliCharlesworth确实更简单。感谢您指出。您不清楚要实现什么。请描述如果情况更好,我们将能够更好地帮助您。
ambig.cpp: In function ‘int main()’:
ambig.cpp:42:5: error: request for member ‘f’ is ambiguous
ambig.cpp:9:10: error: candidates are: void A<I>::f(I*) [with I = C]
ambig.cpp:9:10: error:                 void A<I>::f(I*) [with I = B]
class D : public A<B>,
          public A<C> {
  public:
    using A<B>::f;  // <=== use
    using A<C>::f;  // <=== this