2013-09-09 3 views
0

У меня есть библиотека, которую im использует для загрузки изображений. Библиотека делает объекты класса из файлов и имеет собственные функции рисования. Я пытаюсь создать класс, который может обрабатывать эти объекты и реализовать некоторую простую логику после выполнения загрузки файлов. Что было бы хорошим способом передать их в качестве ссылки или указателя на мой класс обработки?Передача переменной количества объектов в качестве ссылки на класс

Это то, что я получил до сих пор:

1) Передача их в качестве ссылки по одному. Когда я добавляю файл, мне всегда нужно будет записать новый файл в мое определение класса.

2) Загрузка всех объектов в массив и передача их в качестве ссылки. Мне еще нужно установить класс defition, чтобы я знал, сколько элементов в массиве. Но что, если у меня есть разные файлы с размерами для загрузки на разных этапах моей программы? Написание многих перегрузок конструктора/функции не похоже на правильный способ сделать это.

Я искал выходные и не нашел никаких решений для этого, поэтому любые вопросы и советы будут приветствоваться. О, и я довольно новичок в C++, поэтому считаю, что мои знания ограничены. Я могу понять идею о том, что указатели и ссылки, но что-то происходит с ними, медленны.

Чтобы повторить мой вопрос. Что было бы хорошим способом передать переменное количество объектов в качестве ссылки или указателя на мой класс обработки?

+0

Читайте на 'std :: vector'. В первом приближении это похоже на массив, но он намного более гибкий и, естественно, справляется с тем, что не зная, сколько элементов вам нужно начинать, он может динамически расти. – us2012

+0

Возможно, вектор или список? Кто отвечает за выделение объектов? Создаете ли вы объект и переходите в библиотеку для заполнения, или библиотека создает и заполняет объект и возвращает его? –

+0

кажется std :: вектор работает хорошо, не определяя количество данных, которое будет в определении класса =) спасибо, остальная часть недели сохранена! – John

ответ

0

вы можете сделать ваши функции выглядеть следующим образом:

void my_function(std::vector<SomeObject *> &objs) { 
    // ... 
} 

, а затем вы можете перебрать Objs вектора с использованием итератора, или просто проверить

objs.size() 

см http://en.cppreference.com/w/cpp/container/vector

+0

Есть ли какая-то разница, если я использую его так: my_function (std :: vector & objs) – John

+0

, похоже, не работает, но оставляя ссылочный знак работы. спасибо за ответы! – John

+0

@John Это должно быть 'std :: vector & objs' –

0

Вы не указали информацию о своем выпуске, но ваше решение №2 должно быть прекрасным, и вы можете просто передать переменную int, чтобы удерживать количество элементов в массиве.

Смежные вопросы