Мне нужно создать общий несущий объект класс. Я придумал что-то простое, какОбщий класс несущих объектов - C++
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
, специализированный для указателей. Но, к сожалению, я не в состоянии сделать эту работу.
Любая помощь будет отличной.
Почему первый не работает с конструкторами с параметрами? Наверняка вам нужен только конструктор копирования? Или я что-то пропустил? – Goz
@Goz: Вам что-то не хватает. Когда объект создается, по умолчанию (пустой или со всеми параметрами по умолчанию) используется для создания элемента item_. – rmn