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