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

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

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 чей размер определяется разработчиками?

2

Решение

Прежде всего, из-за его статичности, 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() вернуть ссылку в целях эффективности.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector