Bitset作为函数的返回值

Bitset as the return value of a function

本文关键字:返回值 函数 Bitset      更新时间:2023-10-16

我想有一个接口,其函数返回一个bitset:

class IMyInterface
{
public:
    virtual std::bitset<100> GetBits() = 0;
};

问题是我不想强制bitset的大小。所以我想我必须用boost::dynamic_bitset来代替:

class IMyInterface
{
public:
    virtual boost::dynamic_bitset<> GetBits() = 0;
};

我听说boost::dynamic_bitsetstd::bitset慢。有没有其他的方法来避免使用dynamic_bitset,并有一个接口,返回std::bitset的大小是由实现者确定的?

首先,由于std::bitset的静态性,我们认为它不是一个好的解决方案。除了boost::的东西,你可以使用像…

template<size_t N>
class IMyInterface {
    public:
        virtual std::bitset<N> GetBits() = 0;
};

但是那样还是太静态了,不是吗?嗯,标准指定了std::vector<bool>的专门化,它通常被实现为动态的、内存高效的std::bitset !所以…

#include <vector>
class IMyInterface {
    public:
        virtual std::vector<bool>& GetBits() = 0;
};

Edit:使IMyInterface::GetBits()返回一个引用以提高效率。