#c #stdtuple
#c #стандартный набор
Вопрос:
У меня есть несколько объектов пользовательских классов, и я пытаюсь создать класс, в котором могут храниться все мои предыдущие объекты std::tuple
. К сожалению, я новичок в кортежах c . Ниже то, что я сделал до сих пор:
class Universe {
public :
std::tuple<Plain, Point, Rectangle> all_things;
Universe() {
this->all_things = std::make_tuple();
};
template <class T>
void add( T obj ) {
this->all_things.append(obj);
};
}
Это ошибка, которую я получаю (та же ошибка, что и при использовании пустого конструктора):
error: no matching function for call to 'std::tuple<Plain, Point, Rectangle>::tuple()'
18 | Universe() {
Также я хотел бы знать, существуют ли какие-либо методы кортежа для добавления чего-либо. Извините, я еще не нашел никакой полезной информации по сети…
Ответ №1:
Ошибка, которую вы видите, подразумевает, что один из элементов, содержащихся в кортеже, не может быть сконструирован по умолчанию. В таком случае вы должны инициализировать кортеж-член с соответствующими аргументами, чтобы использовать конструкторы, отличные от стандартных, для членов кортежа.
Также я хотел бы знать, существует ли какой-либо метод tuple для добавления чего-либо.
Нет. Кортеж содержит все его члены с начала его жизненного цикла до конца. Невозможно добавить или удалить элементы.