boost::dynamic_bitset
AND 演算の後のビット数のカウントなど、必要な機能を使用してクラスを拡張しようとしています。また、set()
メソッドを確実に「オーバーライド」できるようにするため、プライベート メンバー (m_num_bits など) へのアクセスも必要です。 resize() fctpos
を使用したビットセットの容量。設定するビットの が現在のビットセットの容量よりも大きい場合。ネイティブset()
fct を使用すると、その場合はアサーション エラーが発生します (この場合、set()
メソッドのサイズが変更されないため) 。
私はテンプレートの経験があまりありません。また、数週間前から C++ に戻ったばかりです。少し錆びています。誰かが私を助けてくれるかもしれません。
私はこれを始めました:
template <typename Block, typename Allocator>
class ExtendedBitSet : public boost::dynamic_bitset<Block, Allocator> {
typedef boost::dynamic_bitset<Block, Allocator> super;
public:
void set(std::size_t pos) {
if (pos > super::size())
super::resize(pos);
set(pos);
}
bool get(std::size_t pos) const {
return super::test(pos);
}
};
// ...
ExtendedBitSet<> * bs = new ExtendedBitSet<>(128);
bs->set(33);
// ...
std::wcout << "Bit 48 is " << ((bs->get(48) == true) ? "true" : "false") << std::endl;
// ...
delete bs;
もちろん、これはコンパイルされていません。エラーは次のとおりです。
dynamic_bitset.cpp: In function ‘int main(int, char**)’:
dynamic_bitset.cpp:50: error: wrong number of template arguments (0, should be 2)
dynamic_bitset.cpp:7: error: provided for ‘template<class T, class Allocator> class ExtendedBitSet’
dynamic_bitset.cpp:50: error: invalid type in declaration before ‘=’ token
dynamic_bitset.cpp:50: error: wrong number of template arguments (0, should be 2)
dynamic_bitset.cpp:7: error: provided for ‘template<class T, class Allocator> class ExtendedBitSet’
dynamic_bitset.cpp:51: error: request for member ‘set’ in ‘* bs’, which is of non-class type ‘int’
..
dynamic_bitset.cpp:57: error: request for member ‘get’ in ‘* bs’, which is of non-class type ‘int’
誰かがそれを実行する方法のヒントを与えることができますか? また、dynamic_bitset クラスから派生するよりも良い方法がありますか、それともこれで問題ありませんか?
どんな助けでも大歓迎です。