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