c : создание кортежа и добавление элемента

#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 для добавления чего-либо.

Нет. Кортеж содержит все его члены с начала его жизненного цикла до конца. Невозможно добавить или удалить элементы.