提问人:Spiros Tsalikis 提问时间:3/24/2022 最后编辑:Spiros Tsalikis 更新时间:3/24/2022 访问量:87
复制具有可子类化的成员的类的构造函数
Copy Constructor for class with a member that can be subclassed
问:
我正在使用以下类,该类具有一个成员来构造一个可以使用模板进行子类化的列表。
class dynamic_list
{
template <typename = void>
struct node
{
std::unique_ptr<node<>> next;
virtual ~node() = default;
virtual std::unique_ptr<node<>> clone() const = 0;
};
template <typename T>
struct typed_node : node<>
{
T value;
constexpr typed_node(const typed_node<T>& node)
: value(node.value)
{
}
template <typename Arg>
constexpr typed_node(const Arg& arg)
: value(arg)
{
}
std::unique_ptr<node<>> clone() const override
{
return std::unique_ptr<typed_node<T>>(new typed_node<T>(*this));
}
};
std::unique_ptr<node<>> head_;
public:
constexpr dynamic_list() = default;
template <typename T, typename Arg>
const T& push(const Arg& arg)
{
auto new_node = std::unique_ptr<typed_node<T>>(new typed_node<T>(arg));
auto& value = new_node->value;
new_node->next = std::move(head_);
head_ = std::move(new_node);
return value;
}
};
我正在尝试为这个类编写一个复制构造函数,到目前为止,我有以下内容,但它不起作用:
dynamic_list(const dynamic_list& list)
{
if (list.head_)
{
head_ = list.head_->clone();
auto temp = head_.get();
auto list_temp = list.head_.get();
while (list_temp->next)
{
temp->next = list_temp->next->clone();
temp = temp->next.get();
list_temp = list_temp->next.get();
}
}
}
任何帮助将不胜感激
答: 暂无答案
上一个:每个派生类的复制构造函数
评论
unique_ptr
node::next
std::any