Вопрос сугубо практический...
Есть типа такого:
// интерфейс
class A
{
public:
A();
virtual ~A() = 0;
int GetValueA();
char* GetValueB();
};
// используется полиморфно
class B: public A
{
public:
~B() {}
int GetValueA();
char* GetValueB();
long GetValueC();
... // тут еще может быть стопицот геттеров
};
// всё это в каком то контейнере, для простоты пусть std::vector<A*>.
std::vector<A*> vecA; // здесь данные всегда живы, не удаляются, не изменяются...
Хочется функцию, которая будет обращаться к этому контейнеру, и на основании значений возвращаемых геттерами объектов класса B, чтото возвращала. Но что? Набор? Новый std::vector? Range?
Посмотрел в сторону алгоритмов возвращающие наборы, типа std::copy_if.
int Func(const std::vector<A*>& in, std::vector<A*>& out)
{
out.resize(in.size());
auto it = std::copy_if(in.begin(), in.end(), out.begin(), [&](A* b) -> bool
{
if (b.GetValueA()) return true;
if (b.GetValueB()) return false;
// и т.д., на основании значений геттеров принимаем решение, копировать или нет
});
out.resize(std::distance(out.begin(), it));
}
И так делаем часто, выборку из контейнера по каким то условиям на основании значений геттеров.
Кажется както не эффективно, особенно постоянное копирование.
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!