Битсет как возвращаемое значение функции

Я хотел бы иметь интерфейс, функция которого возвращает битовый набор:

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

Проблема в том, что я не хочу форсировать размер bitset, Так что я думаю, что я должен использовать boost::dynamic_bitset вместо:

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

Я слышал что boost::dynamic_bitset медленнее, чем std::bitset хоть. Есть ли другой способ избежать использования dynamic_bitset и иметь интерфейс, который возвращает std::bitset чей размер определяется разработчиками?

1 ответ

Прежде всего, из-за его статичности, 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;
};

Редактировать: Сделано IMyInterface::GetBits() вернуть ссылку в целях эффективности.

Другие вопросы по тегам