我尝试使用我需要的一些功能扩展boost::dynamic_bitset
类,例如在AND操作之后计算位等。另外我需要访问私有成员(m_num_bits等),因为我希望能够如果要设置的位的set()
大于当前的bitset容量,则“覆盖”pos
方法以使用resize()fct确保bitset的容量。如果我使用本机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类派生更好的方法,或者可以这样做吗?
非常感谢任何帮助。
答案 0 :(得分:1)
您的ExtendedBitSet<>
没有模板类型参数的默认参数,您的代码正在尝试实例化它而不明确指定它们。请尝试使用ExtendedBitSet<unsigned, std::allocator<unsigned> > bs
。