2015-11-17 36 views
0

定義位集合的大小我有一個類使用模板

template <class MAX> 
class A 
{ 
    std::bitset<MAX> _mem ; 
} 

這個類的目的,是讓我可以具有可變長度位集。用於我的程序的不同部分。

但鐺完全給我的錯誤

template argument for non type template parameter should be an expression 

回答

4

bitset模板期望一個恆定的積分表達式,不是一個類型。試試這個:

template < size_t MAX > 
class A { std::bitset<MAX> _mem; }; 
+0

我在想整數是一種類型。 – nnrales

+0

'int'是一個類型* An * int是一個對象......除非它是一個常量表達式,然後它可能永遠不會成爲一個對象(一個對象是內存中的東西) –

3

目前尚不清楚你想在這裏實現什麼,而是因爲std::bitset的大小是一個整數,你需要通過某種形式的整數:

template <size_t MAX> 
class A { 
    std::bitset<MAX> _mem; 
}; 

對於一般情況下,可變長度的位集,您可能需要考慮諸如Boost dynamic_bitset之類的內容,而不是重新創建這個特定的輪子。對於某些目的,std::vector<bool>是一個值得選擇的(儘管它不是一個真正的容器,儘管名稱並不像其他類型的vector s很像。

+0

不會比較小我有超過100萬個元素,每個元素都有一個500的集合。所以使用std :: vector 是禁止性的空間明智的。 – nnrales

+0

@nnrales:其實,人們不喜歡'std ::矢量'是它(通常現在,以前是必需的)以僅使用一個比特的格式存儲'bool's,s一個包含500個元素的'vector '通常會被存儲在500/8 = 63個字節(加上一點用於記錄)中。 –