gpt4 book ai didi

c++ - 复制所有父类(super class)构造函数

转载 作者:行者123 更新时间:2023-11-28 01:26:28 26 4
gpt4 key购买 nike

我想向现有类添加一个新的构造函数(扩展 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 时,但这确实很乏味并且在我看来有点难看。

最佳答案

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

关于c++ - 复制所有父类(super class)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53549007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com