У меня есть класс, который я хочу выставить для списка структур (которые содержат только целые числа). Я не хочу снаружи, чтобы изменить эти данные, просто перебрать его и читать их Пример:Сделайте мой класс C++ итерабельным через BOOST_FOREACH
struct TestData
{
int x;
int y;
// other data as well
}
class IterableTest
{
public:
// expose TestData here
};
сейчас в моем коде я хочу использовать мой класс, как это:
IterableTest test;
BOOST_FOREACH(const TestData& data, test.data())
{
// do something with data
}
Я уже прочитал эту статью http://accu.org/index.php/journals/1527 о членах. Однако я не хочу (или не могу) сохранять все TestData во внутреннем векторе или что-то в этом роде. Это связано с тем, что сам класс не владеет хранилищем, т. Е. На самом деле нет базового контейнера, к которому можно получить доступ непосредственно классом. Однако сам класс может запросить внешний компонент для получения следующего, предыдущего или i-го элемента.
Так что в основном я хочу, чтобы мой класс вел себя так, как будто у него была коллекция, но на самом деле у нее ее нет. Любые идеи?
Вам не нужно предоставлять функции начала/конца, возвращающие подходящие итераторы? – jalf
да, но у меня нет базового контейнера, который мог бы предоставить мне эти итераторы – newgre
, поэтому напишите их сами. :) Библиотека Boost.Iterator должна быстро запускать вас и запускать. – jalf