我不知道如何表达两个都将被子类化的类的依赖关系/关系。我认为一个例子可以帮助这里:
假设我有两个类,Master
和 Slave
。Master
类有一些方法,比如 void use(Slave * s)
和 Slave * generateFrom(int a)
class Master
{
public:
virtual void use(Slave * s) = 0;
virtual Slave * generateFrom(int a) = 0;
};
class Slave
{
};
现在我想继承这两个类,但又不想失去它们之间的关系:
ConcreteMasterA ma();
ConcreteSlaveA * sa = ma.generateFrom(1);
ConcreteMasterB mb();
mb.use(sa); // THIS SHALL NOT WORK
Master * m = new ConcreteMasterA();
Slave * s = m->generateFrom(1); //s should now be a ConcreteSlaveA
m->use(s); // THIS SHALL WORK
有没有办法用 C++ 类/模板等来表达这种关系?
附加信息
也许我需要更具体一点:
我有类 Arm
代表机器人 ARM 。机器人 ARM 的状态由一些参数(角度、距离)指定,并应由 JointVariableVector
类表示
我想稍后使用另一个类来控制 ARM ,但是这个类只能使用 Arm
和 JointVariableVector
导出的方法。
Arm
将被子类化以提供每个特定机器人 ARM (例如 SCARA 或 KUKA)的正确功能,并且由于结构不同,我需要 JointVariableVector
的子类(例如一个只有 2 个角的子类,另一个有 3 个角和一个距离的子类)
我会做这样的事情
class ConcreteMasterA:public Master
{
typedef ConcreteSlaveA MySlaveType;
public:
virtual void use(Slave * s){
MySlaveType* ms = dynamic_cast<MySlaveType*>(s);
assert(ms); // or other type of error handling
}
virtual Slave * generateFrom(int a){
return new MySlaveType();
}
};
如果你想要更严格的测试,你可以使用
assert(typeid(s)==typeid(MySlaveType*));
在你的使用函数中
我是一名优秀的程序员,十分优秀!