Я хотел бы добавить новый конструктор в существующий класс (расширение boost::dynamic_bitset
для разрешения const char*
в качестве аргумента).Поскольку это не представляется возможным сделать напрямую, я бы согласился с созданием подкласса boost::dynamic_bitset_plus
, который позволил бы мне добавить новый конструктор.Однако в классе есть целый ряд других конструкторов, которые я хотел бы сохранить.Есть ли способ сделать это без явной реализации каждого из них?
По сути, я мог бы просто сделать это:
namespace boost
{
template <typename Block, typename Allocator>
class dynamic_bitset_plus<Block, Allocator> : public boost::dynamic_bitset<Block, Allocator>
{
public:
// new constructor
explicit dynamic_bitset_plus(const char* s) : boost::dynamic_bitset<Block, Allocator>(std::string(s)) {}
// existing constructors - boring but needed
template <typename CharT, typename Traits, typename Alloc>
explicit dynamic_bitset_plus(const std::basic_string<CharT, Traits, Alloc>& s,
typename std::basic_string<CharT, Traits, Alloc>::size_type pos = 0,
typename std::basic_string<CharT, Traits, Alloc>::size_type n = std::basic_string<CharT, Traits, Alloc>::npos,
const Allocator& alloc = Allocator()) : boost::dynamic_bitset<Block, Allocator>(s, pos, n, alloc) {}
// and a bunch of others ...
};
}
, но я ищу способ избежать указаниявсе существующие конструкторы.
Я понимаю, что вы могли бы просто написать функцию, которая принимает const char*
и возвращает boost::dynamic_bitset
, или просто вызывать std::string(...)
при создании нового boost::dynamic_bitset
, но этостановится утомительным и выглядит немного некрасиво ИМО.