我想将位集传递给函数。如果位集的大小不同,我应该为函数原型中的位集参数size
分配什么?bits
例如:
bitset<3> a;
bitset<4> b;
void ABC(bitset<size> bits){
...
}
ABC(a);
ABC(b);
我想将位集传递给函数。如果位集的大小不同,我应该为函数原型中的位集参数size
分配什么?bits
例如:
bitset<3> a;
bitset<4> b;
void ABC(bitset<size> bits){
...
}
ABC(a);
ABC(b);
您可以模板化以 bitset 作为参数的函数。
template <size_t bitsetsize>
void ABC(bitset<bitsetsize> a) {
...
}
仅当您在代码中的某处使用此模板化函数时,编译器才会生成此模板化函数。如果将此函数用于不同大小的位集,则将为每个大小实例化一次单独的函数。因此,您应该注意避免代码依赖于任何局部状态变量(static
函数局部变量),因为函数实例是不同的。
建议使用引用或常量引用来避免对象复制。
template <size_t bitsetsize>
void ABC(const bitset<bitsetsize> &a) {
...
}
如果可能,可能不适合您的要求的替代方法是使用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;
}
看这里