我有一個班級,名字叫ToolConfigurationVector
,班級叫JointVariableVector
。 我需要能夠在這兩個類之間進行轉換(它們是相同數據的不同表示)從另一個班級創建特定於其他班級的班級的高效方法
A ToolConfigurationVector
只包含6個基本數據類型。情況總是如此。
A JointVariableVector
是特定於Robotarm的表示,由類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?
我不想包含任何有關哪個子類Arm
在使用到ToolConfigurationVector
,信息應以某種方式儲存在JointVariableVector
當然,我可以使用模板是這樣的:
JointVariableVector<ComplexArm> how = ...
但這並不適用於我而言,我必須解決這個問題使用ONLY
someArm
tcv
ToolConfigurationVector
JointVariableVector
我當然可以給Arm
像jointVariableVectorFromToolConfigurationVector(ToolConfigurationVector v)
一個虛擬的方法,但我不能讓它靜態的,因爲它有什麼做其實現爲方法的實際Arm
對象(沒有靜態)對我來說似乎是錯誤的。
我能做些什麼來獲得優雅的解決方案?當然,這個解決方案也應該是高效的(根據所需的類,對象和執行時間)。
很抱歉的冠軍,但我不能讓這個總結。可能被提名爲「最差冠軍」獎項... –
那麼免費功能呢?他們被允許嗎? –
你的意思是免費的功能呢?我需要將'ToolConfigurationVector'轉換爲'JointVariableVector',但是這種轉換需要附加信息('someArm'的**類型**)。我知道如何使用'Arm'中的(虛擬)方法來做到這一點,但這對我來說似乎是錯誤的。 –