2015-11-17 31 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个字节(加上一点用于记录)中。 –