2015-11-17 7 views
0

У меня есть классОпределение размера BitSet с помощью шаблона

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

Цель этого класса, так что я могу иметь переменную bitsets длины. Используется в разных частях моей программы.

Но лязг полный дает мне ошибку

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

Не принимает ли битбит меньше я имею более 1 миллиона элементов, каждый из которых имеет бит 500. Таким образом, использование std :: vector было запретительным пространством. – nnrales

+0

@nnrales: На самом деле, нет. Точная причина, по которой люди не любят 'std :: vector 'заключается в том, что он (как правило, теперь требуется) хранит' bool 'в формате, который использует только один бит за штуку, s o a 'vector ' из 500 элементов обычно будет храниться в чем-то вроде 500/8 = 63 байта (плюс немного для бухгалтерского учета). –

 Смежные вопросы

  • Нет связанных вопросов^_^