我需要创建一个通用的对象载体类。我想出了一些简单的东西
template<typename T>
class ObjectCarrier
{
public:
const T& item() const
{
return item_;
}
void setItem(T& item)
{
item_ = item;
}
private:
T item_;
};
当T
有默认构造函数(无参数)时,这很有效。T
当有参数化的构造函数时,事情变得复杂了。所以我重写了这个类
template<typename T>
class ObjectCarrier
{
public:
const T& item() const
{
return *item_;
}
void setItem(T& item)
{
item_ = new T ( item );
}
private:
T* item_;
};
item_
将变量更改为T*
并使用 的复制构造函数创建了一个新实例T
。这再次运行良好,直到T
是指针类型。我的意思是ObjectCarrier<Foo*>
不会工作。
我想知道如何设计这个类,以便它适用于几乎所有类型的类型。我想我可能需要创建一个traits
专门用于指针的类型。但不幸的是,我无法完成这项工作。
任何帮助都会很棒。