从另一个类创建另一个特定类的优雅/高效的方法
Elegant/efficient way to create a class specific to another class from another class
我有一个称为ToolConfigurationVector
的类和一个名为JointVariableVector
的类。我需要能够在这两个类之间转换(它们是相同数据的不同表示)
ToolConfigurationVector
仅由6个基元数据类型组成。情况总是如此。
JointVariableVector
是机器人手臂特有的表示,由类Arm
表示。
因此,对于Arm
(如SimpleArm
)的一个子类,表示和因此到ToolConfigurationVector
的转换与Arm
(如ComplexArm
)的另一个子类的表示和转换完全不同
稍后,我想使用这样的类:
Arm * someArm = new ComplexArm();
// ...
JointVariableVector jvv = someArm.currentJointVariableVector();
ToolConfigurationVector tcv = jvv.toToolConfigurationVector(); // no problem using virtual function
JointVariableVector how = tcv.toJointVariableVector(); // how?
我不想在ToolConfigurationVector
中包含任何关于Arm
的哪个子类正在使用的信息,这些信息应该以某种方式存储在JointVariableVector
中
当然,我可以使用这样的模板:
JointVariableVector<ComplexArm> how = ...
但这不适用于我的情况,我必须使用ONLY来解决这个问题
someArm
tcv
ToolConfigurationVector
JointVariableVector
我当然可以给Arm
一个像jointVariableVectorFromToolConfigurationVector(ToolConfigurationVector v)
一样的虚拟方法,但我不能让它成为静态的,因为它与实际的Arm
对象没有任何关系实现它作为方法(没有静态)对我来说似乎是错误的。
我能做些什么来获得一个优雅的解决方案?当然,这个解决方案也应该是高效的(就所需的类、对象和执行时间而言)。
从jvv.toToolConfigurationVector(); // no problem using virtual function
中,它表示JointVariableVector
持有指向Arm
子类实例的指针或引用,或者它正在使用类似于pImpl
模式的东西,以便在创建它的Arm
子类中进行虚拟行为。
如果您希望ToolConfigurationVector::toJointVariableVector
创建一个在Arm
的哪个子类中是虚拟的类,则(a)ToolConfigurationVector
必须是虚拟的,在Arm
的哪个子级中,JointVariableVector
将是虚拟的;或者(B)ToolConfigurationVector::toJointVariableVector
需要提供一个Arm
来创建将在Arm
子类中虚拟的JointVariableVector
。即通过一个Arm
到toJointVariableVector
。
或者,JointVariableVector
可能是某种原始对象,稍后需要先使用Arm
上下文才能有意义,但这会造成混乱。
因此,需要明确的是,JointVariableVector
要么有一个指向Arm
的指针(因为它的表示是所述Arm
的函数),要么是一个基于语法的pImpl
模式类(其中JointVariableVector
的实例,而不是指向相同实例的指针,调用虚拟行为)。所述JointVariableVector
是如何构建的,这是其来源的Arm
的函数。ToolConfigurationVector
会丢失该信息。要重建JointVariableVector
,必须将Arm
重新注入到该情况中。
如果JointVariableVector
只是Arm
类型的函数(而不是在实例上),那么您可以将toJointVariableVector
设置为创建JointVariableVector
的Arm
类型的模板函数。为了减少ToolConfigurationVector
对Arm
子类的依赖,让ToolConfigurationVector
将调用调度到Arm
类型的免费模板函数,然后可以在每个Arm
子类附近实现该函数,并更改生成的JointVariableVector
。
这会给你语法:
Arm * someArm = new ComplexArm();
// ...
JointVariableVector jvv = someArm.currentJointVariableVector();
ToolConfigurationVector tcv = jvv.toToolConfigurationVector();
JointVariableVector how = tcv.toJointVariableVector<ComplexArm>();
- 不能将方法返回的值用于另一个方法
- 重写另一个方法 [C++] 使用的超类回调函数
- 从同一类中的另一个方法调用方法时出错
- 如何将一个方法中的值返回到同一类的另一个方法
- 是否可以在另一个方法中使用模板类中定义的虚拟方法
- 调用方法,该方法修改字段,而使用该字段的另一个方法正在执行
- 将一个方法作为参数传递给另一个方法,该方法本身将传递的方法传递给 std 线程
- 从 ndk 中的 jni 方法调用另一个C++方法
- 在 c++ 中返回一个结构数组,并将此数组传递给另一个方法
- 如何使一个方法在新线程中调用同一类中的另一个方法
- 我不知道如何将变量从一个类中的方法传递和检索到另一个类的另一个方法
- 阻止在另一个方法之前调用一个方法
- C++:重写由另一个方法调用的受保护方法
- 调用静态单一实例以调用另一个方法的方法
- C++传递另一个方法作为参数
- 从另一个方法调用成员方法指针
- 指向 int 数组的指针,从另一个方法传递和使用它
- C++:在另一个方法中使用预先声明的运算符[]
- 调用一个方法会将输出返回到同一类c++的另一个方法中
- 从另一个方法调用非静态成员方法