Как передать объект по ссылке на функцию и получить доступ к переменным внутри публичной структуры

avatar
jabroni
9 августа 2021 в 03:53
104
0
0

Мне просто интересно, можно ли сделать что-то подобное ниже? Прямо сейчас в функции itemModifier я передаю каждый элемент структуры отдельно из диапазона на основе цикла for. Прямо сейчас это нормально, однако, поскольку я подозреваю, что параметры функции будут расти, я не хочу иметь одну гигантскую функцию, которая принимает 8 переменных, а вместо этого лучше будет передавать объект по ссылке и напрямую обращаться к переменным a и b вместо того, чтобы делать их копии.

class Items
{
public:
    struct lastItems
    {
        int a;
        int b;
    };
    
public:
    bool itemModifier(Items &items)
    vector<lastItems> getItems();    // just returns lastItems 
};

bool Items::itemModifier(Items &items)
{
    std::cout << items.a << std::endl;
    std::cout << items.b << std::endl;

    return true;
}

int main()
{
    Items items;

    /* Read file supplied in that populates a and b 
       and adds it to vector<lastItems>              */

    for(auto &i:items){
        item.itemModifier(i);
    }

   return EXIT_SUCCESS;
}
``
Источник
Nasrat Takoor
9 августа 2021 в 04:01
0

ну, класс Items не имеет данных. Вы хотели добавить private: vector<lastItems> li;

JaMiT
9 августа 2021 в 04:04
1

"Мне просто интересно, можно ли сделать что-то подобное ниже?" -- Учитывая, что "это ниже" существует, я заключаю, что да, это возможно. Возможно, вы могли бы описать словами, чего вы пытаетесь достичь, прежде чем бросить нас в код?

Peter
9 августа 2021 в 04:17
1

Почему бы не передать в качестве аргумента struct, который содержит другие переменные? У вас есть варианты передачи этого struct по ссылке и/или для того, чтобы этот struct содержал элементы, которые являются ссылками (инициализированными, чтобы они ссылались на выбранные вами переменные). Если вы не хотите передавать какие-либо дополнительные аргументы, вы будете ограничены либо изменением Items, чтобы он содержал ссылку, либо (вариант с большим количеством недостатков) сохранением дополнительных переменных в глобальные

Ответы (0)