我正在尝试一个有两个类和一个免费功能的基本东西。首先我有两个课程:
struct BASE{
BASE(int a = 0):a_(a){};
virtual ~BASE(){};
virtual void foo(){std::cout << "BASE " << std::endl;}
int a_;
};
struct DERIVED: public BASE{
DERIVED():BASE(){};
void foo(){std::cout << "DERIVED " << std::endl;}
};
然后我填写一个 std::vector (或 boost::ptr_vector)
std::vector<BASE* > vec;
vec.push_back( new BASE(2));
vec.push_back( new DERIVED);
如果我调用我的函数 foo,则没有 pb 虚拟的东西效果很好,但是如果我创建两个自由函数:
void foo(BASE* a, DERIVED* b){
std::cout << " mix base/derived " << std::endl;
}
void foo(BASE* a, BASE* b){
std::cout << " full base " << std::endl;
}
如果我做
foo(vec[0], vec[1]); //failed
我会收到消息
full base
嗯,这是合乎逻辑的,因为我有 BASE* 的向量,但它是否存在以获得对我的自由函数的良好调用?我需要继承,所以我不能真正分离这两个类,因为我必须填满这个容器
此外,最后我的向量将被随机填充,所以我无法提前知道如何正确投射。