c++ - 复制所有超类构造函数
问题描述
我想向现有类添加一个新的构造函数(扩展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 ...
};
}
但我正在寻找一种方法来避免指定所有现有的构造函数。
我确实意识到您可以简单地编写一个接受 aconst char*
并返回 a的函数,或者在创建 new 时boost::dynamic_bitset
简单地调用,但这确实变得乏味并且看起来有点丑 IMO。std::string(...)
boost::dynamic_bitset
解决方案
该using
指令可以引入基类构造函数。当我尝试它时,我发现它没有包含默认构造函数,但是很容易包含它;一个空的默认构造函数当然会隐式调用基类。
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;
};
推荐阅读
- angular - 无法在状态 200 响应中显示错误消息
- redis - 重新启动后,apscheduler 失去工作
- tinymce - 防止在 Tiny Text Editor (TinyMCE) 中滚动
- python - 具有一些不可训练权重的自定义 Keras 层
- azure - Azure WebApp Linux 和 KissLog 无法访问 /tmp 路径
- c# - 在静态 Convert 类中使用反射和泛型将十进制转换为二进制?
- python - 错误 __str__ 返回非字符串(NoneType 类型)
- xml - grep 并粘贴到同一个文件中
- lodash - Lodash 4:如何比较两个对象键并返回差异?
- python-3.x - 如何在不使用 reversed() 和 [::-1] 的情况下拆分任何单词