我有以下情形:Access數據與它的正確類型轉換派生模板類
class ScalarField
{
void* _buffer; //Array for data.
};
而派生類:
template <typename T>
class ScalarFieldT : public ScalarField
{
ScalarFieldT(int size)
{
_data = new T[size];
_buffer = _data;
}
T& get(int index)
{
return _data[index];
}
T* _data; // Typed array for data
};
注意T
只能假設爲基本類型如float,int,double等等。
這是一個非常古老的遺留代碼,所以我沒有太大的靈活性來適當地調整它,做出更好的設計。需要做的是從ScalarField::_buffer
獲取正確類型化派生類的數據。
像這樣:
void main()
{
int n = TOTAL_SIZE;
ScalarFieldT<int> typedScalarField(n);
ScalarField* scalarField = &typedScalarField;
// This is what I need to do:
int index = ELEMENT_INDEX;
float value = scalarField->method(index); // Get the value from base class correctly converted from int to float, for example.
}
的一點是,我只能訪問的基類的抽象,但是我需要從_buffer
轉換爲另一種簡單的數據類型,例如浮動,INT的值, uchar等
你們推薦什麼?
在此先感謝!
你想要的'int'被鑄成一個'float'在'主()'例子,或者你打算要保證100%是' float value = scalarField-> get(index);'只會用實例化爲'ScalarFieldT'的scalarField來調用? – Frank
使用'static_cast'。 –
在你手頭有'ScalarField *'的地方,你知道'_buffer'指向的元素的實際類型嗎?換句話說,你知道'ScalarFieldT'這個特殊的實例是基類子對象嗎?沒有這個,恐怕你很幸運。單看'ScalarField',你就無法判斷'_buffer'是指向一個「int」數組還是「float」數組 - 但是當然數組中的實際位必須是對這兩種情況的解釋非常不同。 –