【问题标题】:Bitset as the return value of a functionBitset 作为函数的返回值
【发布时间】:2015-11-24 10:37:06
【问题描述】:

我想要一个函数返回位集的接口:

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 的接口,其大小由实现者确定?

【问题讨论】:

  • 您可以将界面本身设为模板。

标签: c++ bitset boost-dynamic-bitset std-bitset


【解决方案1】:

首先,由于其静态性,std::bitsetis not considered to be a good solution。除了boost:: 的东西,你还可以使用...

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

但这仍然太静态了,不是吗?好吧,the standards specify that there's an specialization of std::vector&lt;bool&gt;,通常实现为动态的、内存高效的std::bitset!所以...

#include <vector>

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

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

【讨论】:

  • 引用不会对返回值产生影响,因为我们已经有了 RVO。
  • @πάνταῥεῖ:这不是必要也不是标准规定的。毕竟,无论返回值优化做什么,传递引用/指针总是最便宜的。
  • 另一方面,在接口中指定引用返回值会强制实现内部细节。
  • std::vector&lt;bool&gt; 进行按位运算并不容易。
  • @Meysam 是的,这是另一个公平点,界面非常不同。
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多