gpt4 book ai didi

c++ - 扩展 boost::dynamic_bitset 以添加一些功能

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:31 24 4
gpt4 key购买 nike

我尝试使用我需要的一些功能扩展 boost::dynamic_bitset 类,例如在 AND 操作后计算位等。我还需要访问私有(private)成员(m_num_bits 等)因为我希望能够“覆盖”set() 方法以确保 bitset 具有 resize() fct 的容量,如果要设置的位的 pos 是大于当前的位集容量。如果我使用 native 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 类派生更好的方法吗?还是可以这样做?

非常感谢任何帮助。

最佳答案

你的 ExtendedBitSet<>没有模板类型参数的默认参数,您的代码试图在不明确指定它们的情况下实例化它。尝试使用 ExtendedBitSet<unsigned, std::allocator<unsigned> > bs相反。

关于c++ - 扩展 boost::dynamic_bitset 以添加一些功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11445647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com