Функция-член, возвращающая набор битов, наследуется от базового класса

Итак, я пытаюсь создать базовый класс для одного из моих проектов, от которого будет унаследована пара классов. Моя проблема в том, что я пытаюсь вернуть std::bitset из одного из методов, проблема в том, что в каждом из подклассов будут возвращаться битсеты разного размера, поэтому я ищу способ объявить метод, который возвращает битсет неизвестного размера, хорошо неизвестного базовому классу, известному подклассу. Кроме того, у меня есть гарантия, что базовый класс является абстрактным и не будет использоваться сам по себе.


person csteifel    schedule 01.06.2012    source источник


Ответы (1)


Вы не можете этого сделать, размер std::bitset является частью его типа, а разные размеры std::bitset являются разными несвязанными типами. Вы можете абстрагироваться от различий, используя стирание типов, но в вашем конкретном случае было бы проще просто использовать динамический набор битов, например тот, который доступен на Boost.

http://www.boost.org/doc/libs/release/libs/dynamic_bitset/dynamic_bitset.html

Если бы ваш базовый класс был просто служебным классом, не предназначенным для использования из внешнего мира, вы могли бы сделать его классом-шаблоном, параметризованным по размеру std::bitset:

template< int Size > class base
{
    typedef std::bitset< Size > bitset_type;
};

class derived : base< 128 > { ... };

Но тогда каждый из ваших классов будет наследовать от другого несвязанного базового класса.

person K-ballo    schedule 01.06.2012
comment
Да, у меня было предчувствие, что все закончится именно так, но я просто хотел проверить, прежде чем двигаться дальше. - person csteifel; 02.06.2012