6

我想将位集传递给函数。如果位集的大小不同,我应该为函数原型中的位集参数size分配什么?bits

例如:

bitset<3> a;
bitset<4> b;

void ABC(bitset<size> bits){
    ...
}

ABC(a);
ABC(b);
4

2 回答 2

6

您可以模板化以 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

于 2014-05-26T10:27:38.250 回答
2

这对于 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;
}

这里

于 2014-05-26T09:47:53.463 回答