-1

(メンバー変数として) ビットの配列を含む 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::referencebool&

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>たいのですが、あまり正しくないようです)。

4

1 に答える 1