2012-07-12 31 views
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類派生出更好的方法,或者可以這樣做嗎?

任何幫助,非常感謝。

回答

1

您的ExtendedBitSet<>沒有模板類型參數的默認參數,並且您的代碼試圖實例化它,而未明確指定它們。請嘗試使用ExtendedBitSet<unsigned, std::allocator<unsigned> > bs

+0

我現在得到少一些錯誤,但仍然沒有接受對象的創建與大小爲'ExtendedBitSet <無符號的std ::分配器> * BS =新ExtendedBitSet <無符號的std ::分配器> (128);',我必須重寫派生類中的基類構造函數(dynamic_bitset)嗎?現在我遇到了一個編譯器錯誤,它表示:'錯誤:調用'ExtendedBitSet > :: ExtendedBitSet(int)''時沒有匹配函數。我似乎錯過了什麼地方... – 2012-07-12 06:17:04

+0

@ AndreasW.Wylach:是的,你必須在'ExtendedBitSet <>'中提供你自己的ctors。 – wilx 2012-07-12 06:28:20

+0

謝謝,它運行。另外我想知道爲什麼'boost :: dynamic_bitset'沒有** OR **不同長度的位集,這是我的應用程序中的情況,許多位集的OR不同長度。 Java Bitset似乎處理這種情況。這有什麼理由嗎? – 2012-07-13 01:24:02