除了修改所有派生类之外,我无法找到解决问题的方法。
我有一个Base
类和大约 1000 个Derived
类继承自Base
. 现在,还有另一个类说它Container
包含一个Base
类指针向量std::vector<Base *> derivList
。
上面的列表填充了创建后所有派生类对象的地址。
所有文件都在不同的翻译单元中。
我想做什么:
1)
能够使用容器中指向不同派生类的向量元素Base
从类中调用类的单个函数。Container
2)
但是当我调用这个函数时,在那个函数内部我应该能够访问类指针指向public members
的不同Derived
类。Base
class Base
{
public:
virtual void someMethod();
void containerCallsThisMethod();
};
void Base::containerCallsThisMethod()
{
// I need to access the public functions of derived classes here
// say: Derived1::calc(), Derived2::calc,.( I don't have derived class names here in Base)
}
class Derived1:public Base
{
public:
void calc();
};
class Container
{
std::vector<Base *> derivList;
void execute();
};
void Container::execute()
{
for(i = 0; i < derivList.size();i++)
{
derivList[i]->containerCallsThisMethod();
}
}
我的限制是:
- 我不应该碰班级,
Derived
因为它很费力,但我仍然可以改变Base
班级。 Base
不能有一个Derived
类的列表(甚至没有前向声明)。
我想我可以通过this
指针来做到这一点,因为它具有函数的ClassName
类型non-const
并且它指向派生类对象。但我无法Derived
使用this
.
有没有什么方法可以在不费力、任何特定设计模式或黑客攻击的情况下做到这一点?