Расширьте boost::dynamic_bitset, чтобы добавить некоторые функциональные возможности
Я пытаюсь продлить boost::dynamic_bitset
класс с некоторыми необходимыми мне функциями, такими как подсчет битов после операции AND и т. д. Также мне нужен доступ к закрытым членам (m_num_bits и т. д.), потому что я хочу иметь возможность "переопределять" set()
метод обеспечения емкости битсета с помощью функции resize() fct, если pos
установленного бита больше текущей емкости набора битов. Если я использую родной set()
В этом случае он проходит через ошибку утверждения (потому что 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, или это нормально?
Любая помощь с благодарностью.
1 ответ
Ваш ExtendedBitSet<>
не имеет параметров по умолчанию для параметров типа шаблона, и ваш код пытается его создать, не указав их явно. Попробуйте использовать ExtendedBitSet<unsigned, std::allocator<unsigned> > bs
вместо.