复制所有 super-class 构造函数

copying all super-class constructors

我想向现有的 class 添加一个新的构造函数(扩展 boost::dynamic_bitset 以允许 const char* 作为参数)。 由于这似乎无法直接执行,因此我可以创建一个 subclass boost::dynamic_bitset_plus 来代替,这样我就可以添加新的构造函数。然而, class 有一大堆其他的构造函数,我想保留它们。有没有一种方法可以在不显式实现每一个的情况下做到这一点?

基本上我可以这样做:

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* 和 returns 一个 boost::dynamic_bitset,或者只要在创建一个新的 [=] 时调用 std::string(...) 12=],但这确实很乏味,而且在我看来有点难看。

using 指令可以引入基础 class 构造函数。当我尝试它时,我发现它不包含默认构造函数,但是那个构造函数很容易包含;一个空的默认构造函数当然会隐式调用 base-class 一个。

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;
};