如何将任何大小的bitset传递给函数?

Lon*_*ner 4 c++ templates

以下程序编译正常.

#include <iostream>
#include <bitset>

void foo(std::bitset<10> n)
{
    std::cout << n.size() << "\n";
}

int main()
{
    std::bitset<10> n;
    foo(n);
}
Run Code Online (Sandbox Code Playgroud)
$ g++ -std=c++11 -Wall -Wextra -pedantic foo.cpp
$ ./a.out 
10
Run Code Online (Sandbox Code Playgroud)

如何修改foo()函数以使其可以接受bitset任何大小?

son*_*yao 9

这就是模板应该做的事情.因此,foo使用非类型模板参数创建一个函数模板:

template<std::size_t N>
void foo(std::bitset<N> n)
{
    std::cout << n.size() << "\n";
}
Run Code Online (Sandbox Code Playgroud)

然后

std::bitset<10> n10;
foo(n10);
std::bitset<20> n20;
foo(n20);
Run Code Online (Sandbox Code Playgroud)