2
我嘗試用我需要的某些功能來擴展boost::dynamic_bitset
類,比如在AND操作之後計算位等。我還需要訪問私有成員(m_num_bits等),因爲我希望能夠「覆蓋」set()
方法,以確保如果要設置的位的pos
大於當前位集容量,則使用resize()fct確保位集的容量。如果我使用本地set()
FCT它在這種情況下得來的斷言錯誤(因爲set()
方法不會在這種情況下調整)擴展boost :: dynamic_bitset以增加一些功能
我不是很有經驗的模板,還我剛剛回到成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;
Ofcourse這不是編譯,錯誤是:
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 <無符號的std ::分配器> * BS =新ExtendedBitSet <無符號的std ::分配器> (128);',我必須重寫派生類中的基類構造函數(dynamic_bitset)嗎?現在我遇到了一個編譯器錯誤,它表示:'錯誤:調用'ExtendedBitSet > :: ExtendedBitSet(int)''時沒有匹配函數。我似乎錯過了什麼地方... –
2012-07-12 06:17:04
@ AndreasW.Wylach:是的,你必須在'ExtendedBitSet <>'中提供你自己的ctors。 – wilx 2012-07-12 06:28:20
謝謝,它運行。另外我想知道爲什麼'boost :: dynamic_bitset'沒有** OR **不同長度的位集,這是我的應用程序中的情況,許多位集的OR不同長度。 Java Bitset似乎處理這種情況。這有什麼理由嗎? – 2012-07-13 01:24:02