C++类的设计 - 条件数据类型
问题描述:
我困住了一个问题,我找不到一个简单的解决方案。C++类的设计 - 条件数据类型
我有一个图片类:
class Image
{
public:
Image();
~Image();
private:
int m_rows;
int m_cols;
int m_bGray;
/* HOW TO IMPLEMENT THIS?
if(m_bGray)
std::vector<std::vector<unsigned char>> m_data;
else
std::vector<std::vector<std::vector<unsigned char>>> m_data;*/
BITMAPFILEHEADER *m_bmpHeader; // store headers in case we need to write back to HDD
BITMAPINFOHEADER *m_bmpInfo;
};
我的类对象将是任一R-G-B或格雷在任何给定时间点。
这是否需要存储指向原始数据的指针并处理内存分配和自我释放?如果是的话,我会继续arrays
比vectors
是否有任何成语,有这样的情况下直接解决方案?
答
template<bool m_bGray> class Image;
template<> class Image<false> {
std::vector<std::tuple<unsigned char, unsigned char, unsigned char>> m_data;
};
template<> class Image<true> {
std::vector<unsigned char> m_data;
};
您可能必须更具体地说明您期望如何使用和处理图像。 John3136的评论可能是你需要的。
一个灰色的子类和另一个颜色的子类? – John3136
问题:如果某些代码执行了'm_bGray =!m_bGray;'?您将运行时变量与编译时存储混合在一起。 – luk32
作为一边。存储rgb三元组时。你可以避免嵌套的向量。你知道它将是一个包含3个urs的结构。所以你可以使用'std :: tuple'或特定的'rgb'结构/类的向量。 –