ビットの配列(メンバー変数として)を含むC++テンプレートクラスを作成しようとしています。ビット配列のサイズはコンパイル時にわかっていますので、実際にはstd::bitset
であることが欲しいですが、関数をに設定するのは難しいです。ビットを設定してください。C++でビット配列を実装する方法
例えば、私はこのような何かを開始するために私のクラスを希望:
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;
};
ゲッターは大丈夫動作します。問題は、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>
は、配列のサイズをコンパイル時に厳密に固定したいので、かなり正しいとは思われません)。
わかりません。 'std :: bitset'は' operator [] 'を持っています(http://en.cppreference.com/w/cpp/utility/bitset/operator_at)。なぜあなたはなぜホイールを再発明していますか? –
エラーは自明です。 'typename before ... 'を追加してください。それで、なぜあなたはそれをやろうとしないのですか? –
@ThomasMatthews:問題を示すために、おそらくより大きいクラスの最小限のバージョンです。 – Unimportant