2016-07-28 7 views
0

私は問題に悩まされていますが、私は単純な解決策を見つけることができません。C++クラスのデザイン - 条件付きデータ型

私はImageクラスを持っている:

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より先に進んでください。

このようなシナリオでは簡単な解決策がありますか?

+4

グレーのサブクラスとカラーのサブクラスのいずれか? – John3136

+0

質問:いくつかのコードが 'm_bGray =!m_bGray;'を実行するとどうなりますか?実行時変数とコンパイル時の記憶域を混在させます。 – luk32

+1

脇に。 rgbトリプレットを保存するとき。入れ子にされたベクトルを避けることができます。あなたはそれが3つのucharsを含む構造になるでしょう。だから、 'std :: tuple'や特定の' rgb'構造体/クラスのベクトルを使うことができます。 –

答えて

0
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のコメントは必要なものになる可能性があります。