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或格雷在任何给定时间点。

这是否需要存储指向原始数据的指针并处理内存分配和自我释放?如果是的话,我会继续arraysvectors

是否有任何成语,有这样的情况下直接解决方案?

+4

一个灰色的子类和另一个颜色的子类? – John3136

+0

问题:如果某些代码执行了'm_bGray =!m_bGray;'?您将运行时变量与编译时存储混合在一起。 – luk32

+1

作为一边。存储rgb三元组时。你可以避免嵌套的向量。你知道它将是一个包含3个urs的结构。所以你可以使用'std :: tuple'或特定的'rgb'结构/类的向量。 –

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的评论可能是你需要的。