我有一個名爲「位圖」模板結構,看起來像這樣:具有變量(有點)類型的類指針字段?
enum PixelOption { I8, I16, I32, I64, F32, F64 };
template <PixelOption T> struct PixelOptionType;
template<> struct PixelOptionType <I8> { using type = uint8_t; };
template<> struct PixelOptionType <I16> { using type = uint16_t; };
template<> struct PixelOptionType <I32> { using type = uint32_t; };
template<> struct PixelOptionType <I64> { using type = uint64_t; };
template<> struct PixelOptionType <F32> { using type = float; };
template<> struct PixelOptionType <F64> { using type = double; };
template <PixelOption T>
struct Bitmap {
using type = typename PixelOptionType<T>::type;
uint32_t Width, Height;
type* pData;
Bitmap(uint32_t Width, uint32_t Height, uint32_t X, uint32_t Y, uint32_t SourceWidth, void* pData) {
this->Width = Width; this->Height = Height;
this->pData = &reinterpret_cast<type*>(pData)[SourceWidth * Y + X];
}
type* Pixel(const uint32_t &X, const uint32_t &Y) {
return &pData[Width * Y + X];
}
};
現在我想包括在結構中的位圖指針被稱爲「通道」的載體,八九不離十像
struct Channel {
std::vector<Bitmap*> Fragments;
}
但編譯器希望我爲指針聲明模板參數。通道中的所有位圖都是相同的類型(因此通道),但將模板參數添加到通道結構中除了將問題向前推,因爲我打算在即將到來的通道中包含通道向量「層」結構,並將面臨同樣的問題。
我想包括通道結構的構造參數中的像素選項,但似乎找不到我的方式通過該向量聲明沒有運行時投射(我希望避免)。
我試圖用虛函數創建一個struct「BitmapBase」,並在位圖中繼承它,但是通過創建一個位圖基向量,在其中存儲位圖對象並調用像素,我只獲得了虛函數結果,而不是(如我所希望的)替代真實的功能結果。
有沒有人有一個想法如何處理這個?
使像素虛擬做到了訣竅!謝謝。 – user81993 2015-02-10 16:46:10