(メンバー変数として) ビットの配列を含む C++ テンプレート クラスを作成しようとしています。ビット配列のサイズはコンパイル時にわかっているので、 にしたいのですが、ビットを設定する関数をstd::bitset
書くのに苦労しています。operator[]
たとえば、クラスを次のように開始したいと思います。
template<size_t N>
class bitvector
{
public:
bool operator[](size_t i) const { return bits[i]; }
bool& operator[](size_t i) { return bits[i]; }
private:
std::bitset<N> bits;
};
ゲッターは正常に動作します。問題は、 setter 関数が、それ自体がテンプレート化された( ではない) をstd::bitset::operator[]
返すことです。テンプレートの経験はあまりありませんが、次の試みは失敗しました:std::bitset::reference
bool&
template<size_t K>
std::bitset<K>::reference operator[](size_t i) { return bits[i]; }
次のエラーが表示されますneed 'typename' before 'std::bitset<K>::reference' because 'std::bitset<K>' is a dependent scope
。私はいくつかのグーグルを試しましたが、役に立ちませんでした。
std::bitset
このタスクに適したツールはありますか? もしそうなら、どのようにセッター関数を書くことができますか? そうでない場合、代わりに何を使用できますか? (配列サイズをコンパイル時に厳密に固定したいので、実際にはビットとして格納しstd::vector<bool>
たいのですが、あまり正しくないようです)。