Я хочу передать bitset в функцию. Какой размер я должен назначить для набора битов в функции.
например
void ABC(bitset<size> a){
}
Какой должен быть размер, который нужно назначить параметру, передаваемому в функцию?
Вы можете templatize функция, принимающая бит в качестве аргумента.
template <size_t bitsetsize>
void ABC(bitset<bitsetsize> a) {
...
}
Эта шаблонная функция будет сгенерирована компилятором только тогда, когда вы используете ее где-то в своем коде. Если вы используете эту функцию для наборов битов разных размеров, отдельные функции будут созданы один раз для каждого размера. Поэтому вы должны позаботиться о том, чтобы избежать кода, зависящего от любых локальных переменных состояния (static
переменные, локальные для функции), поскольку экземпляры функций различны.
Альтернатива, которая может нет быть пригодным для ваших требований, чтобы использовать std::vector<bool>
вместо std::bitset
если возможно.
Это невозможно с STL bitset
,
std::bitset<N>
шаблон требует фиксированный размер заранее (во время компиляции)
Тем не менее, один из способов вы можете сделать это с помощью boost::dynamic_bitset
Что-то вроде следующего:
#include <iostream>
#include <boost/dynamic_bitset.hpp>
void ABC(boost::dynamic_bitset<> &a)
{
/* for (boost::dynamic_bitset<>::size_type i = 0;
i < a.size(); ++i)
std::cout << a[i]; */
std::cout << a << "\n";
}int main()
{
std::size_t size= 5; // take any value for 'size' at runtime
boost::dynamic_bitset<> x(size); // all 0's by default
x[0] = 1;
x[1] = 1;
x[4] = 1;
ABC( x );
return 0;
}
Увидеть Вот