我不知道如何表达两个类的依赖/关系,这两个类都将被子类化。
假设我有两个类,Master
和Slave
。
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
更多信息
我有一个类Arm
,它代表一个机械臂。机器人手臂的状态由一些参数(角度、距离)指定,并由类JointVariableVector
表示
我想稍后使用另一个类来控制arm,但是这个类只能使用Arm
和JointVariableVector
导出的方法。
Arm
将被子类化,以提供每个特定机械臂的正确功能(例如,SCARA或KUKA),并且由于不同的结构,我需要来自JointVariableVector
的子类(例如。
发布于 2012-11-29 06:07:38
我会做这样的事情
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*));
在你的use函数中
发布于 2012-11-29 05:00:25
您可以在slave类中使用变量Master,它包含创建它的Master。当调用use时,与此值进行比较,并在值相等时接受。
class Slave {
private:
Master * creator;
public:
Slave(Master* master) : creator(Master) {};
Master * getMaster() { return creator; }
}
class Master {
Slave *generateForm(int) {
return new Slave(this);
}
void use(Slave) {
if (Slave.getMaster) == this) {
do stuff;
}
}
}
https://stackoverflow.com/questions/13614052
复制相似问题