复制所有 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;
};
我想向现有的 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;
};