我有一个像这样的模板类:
template<class T>
class List
{
private:
struct node
{
T value;
node *next, *prev;
};
}
当使用T = myClass *创建此List类的实例时,我没有问题,因为value将是一个指针,但如果它是一个对象,则创建一个节点实例会导致“No appropiate default constructor available”错误,如果这样class没有默认构造函数。
我可以通过将T值更改为T *值来解决这个问题,但我需要在列表中包含这些值的副本,这样如果它们在列表之外被删除,它们在此处仍然有效。
接受这种方法的正确方法是什么?
答案 0 :(得分:1)
您可以为node
提供一个构造函数,该构造函数需要一个T
实例,可以从中构建一个副本:
template<class T>
class List
{
private:
struct node
{
node(const T & init_value) : value(init_value) {}
T value;
node *next, *prev;
};
}
这会将T
的要求从默认可构造更改为可复制构造。列表中的任何类型都需要复制构造函数。