I need to create a generic object carrier class. I came up with something simple like
template<typename T>
class ObjectCarrier
{
public:
const T& item() const
{
return item_;
}
void setItem(T& item)
{
item_ = item;
}
private:
T item_;
};
This works well when T
has got a default constructor (parameterless). Things gets complicated when T
has parameterized constructors. So I rewrote the class like
template<typename T>
class ObjectCarrier
{
public:
const T& item() const
{
return *item_;
}
void setItem(T& item)
{
item_ = new T ( item );
}
private:
T* item_;
};
Changed the item_
variable to T*
and created a new instance using the copy constructor of T
. Again this worked well until T
is a pointer type. I mean ObjectCarrier<Foo*>
won't work.
I am wondering how can I design this class so that it works for almost all kind of types. I think I may need to create a traits
type specialized for pointers. But unfortunately, I am not able to make that work.
Any help would be great.