2015-04-06 43 views
0

我正在四處尋找一種方法來使用模板或類似的東西返回不同大小的位集。我還沒有真正玩過這個遊戲的機會,但是我只是好奇,如果有人曾經搞砸過這個,並且設法完成這個。返回可變大小的位集

這裏的目標是避免爲4個不同大小的位集(32,17,10,5)編寫4個函數。我想我可以使用某種模板來實現這一點(只需將模板直接放在函數本身上,而不是類實現或類似的東西)。

所以它會是這個樣子:

template<something SIZE> 
    static bitset<SIZE> function(bitset<SIZE>); 

我基本上可以通過在尺寸大小的位集合,然後一些東西是做給它後返回該尺寸的bitset回來。

我大概可以用矢量做到這一點,然後再投射,但我感覺有一些方法可以完成我在這裏要做的事情。如果有人有任何想法,請隨時讓我知道。我打算稍後深入研究並做一些測試,所以我會在找到一些東西時更新它。

在此先感謝。

----- -----編輯

我已經先行一步,並實施Mark_B的解決方案,它似乎運作良好。如果任何人有另一個實現,我會很高興看到它,但我只是使用模板來實現這一點。

感謝您的快速回復。

+0

調用者在編譯時是否知道大小? –

+0

是的,調用者在編譯時會知道這個大小。它只是作爲一個靜態函數來對位集進行微小的修改。在這種情況下,Mark_B的解決方案似乎是有效的,所以我暫時將繼續這樣做。如果其他人有另一種可能更好的解決方案,或者可能只是以不同的方式工作,我很樂意聽到它。 – Monatrox

回答

2

std::vector<bool>是專門的,所以質量實現只使用每個項目1位。這與標準庫提供的可變長度位集最接近。除此之外,你可以自己做,或使用Boost dynamic_bitset

+0

是的,我正在考慮這樣做,但這需要我重寫我已使用bitset實現的其他代碼段。我想我可以寫一個函數來回轉換,但這可能會導致我出現同樣的問題(要求我返回一個動態大小的位)。即時轉換很簡單,但我必須多次執行,而且當我知道我要在10個不同的地方寫10次時,我喜歡懶惰。 – Monatrox

2

東西會是size_t

template<size_t SIZE> 
bitset<SIZE> function(bitset<SIZE>); 
+0

我更喜歡使用'ptrdiff_t',或者只是'int'。不過,使用'size_t'有助於解決某些舊版本g ++中的錯誤。恕我直言,沒有足夠的理由使用它。 –

+2

@Cheers和hth。 - Alf因爲'bitset'的模板類型是'size_t',你能詳細說明爲什麼不使用它嗎? –

+0

我在想這會工作,但沒有時間來測試它。這使事情變得非常簡單。通常當我使用模板時,我使用類和typedefs作爲參數來實現它們,所以我想我只是不確定是否可以使用size_t作爲模板類型。在測試這個方法之後,它似乎完美地工作。到目前爲止還沒有遇到任何問題。謝謝你的提示。 – Monatrox