代码之家  ›  专栏  ›  技术社区  ›  Henning Koehler

复制所有超类构造函数

  •  0
  • Henning Koehler  · 技术社区  · 6 年前

    我想在现有类中添加一个新的构造函数(扩展 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 ...
        };
    }
    

    我知道你可以简单地写一个函数 并返回一个 boost::动态位集 std::string(...) 每当创建一个新的 boost::动态位集 ,但这确实会变得单调乏味,在我看来有点难看。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mark Ransom    6 年前

    这个 using 指令可以拉入基类构造函数。当我尝试它时,我发现它没有包含默认构造函数,但是这个构造函数很容易包含;一个空的默认构造函数当然会隐式调用基类one。

    template <typename Block, typename Allocator>
    class dynamic_bitset_plus<Block, Allocator> : public boost::dynamic_bitset<Block, Allocator>
    {
    public:
        // default constructor
        dynamic_bitset_plus() {}
        // new constructor
        explicit dynamic_bitset_plus(const char* s) : boost::dynamic_bitset<Block, Allocator>(std::string(s)) {}
        // existing constructors
        using boost::dynamic_bitset<Block, Allocator>::dynamic_bitset;
    };