У меня есть два классаКак SQL выбрать обычно реализуется
class PopulationMember
{
public:
void operationOnThisMember1();
void operationOnThisMember2();
...
private:
Population* populaltion_;
}
class Population
{
public:
void operationOnAllMembers1();
void operationOnAllMembers2();
...
void operationOnAllMembers100();
void sortAllMembersCriterium1();
void sortAllMembersCriterium2();
...
void sortAllMembersCriterium100();
private:
QVector<PopulationMember*> members_;
}
Я хотел бы реализовать ВЫБРАТЬ подобную функциональность моей структуры. Это может выполнять операции только для тех членов, которые имеют определенную комбинацию свойств.
До сих пор я думал, что два подхода:
Реализовать метод, который будет возвращать новый объект Population, состоящий из членов, которые удовлетворяют определенное условие.
Popuation Popuation::select(bool (predicate*) (PopulationMember*));
Добавить флаг
bool selected_;
каждому PopulationMember.
Если я делаю 1. Невозможно реализовать сортировку выбранных данных и удаление. Если я делаю 2. Есть накладные расходы с проверкой на выделение, и мне придется переопределить сортировку и другие алгоритмы для работы только с выбранными членами.
Есть ли третий, лучший способ?
'SELECT' не для фильтрации, он предназначен для проецирования. – jason
Пожалуйста, что вы имеете в виду, спроектировав? Я хотел бы реализовать функциональность фильтрации. –
Проектирование в основном преобразует структуру A в структуру B (где A и B могут быть одной и той же структуры, но часто это не так). Например, «SELECT» таблица «FROM» для исключения всех остальных столбцов. Синтаксис SQL 'SELECT' всегда требует проекции; 'SELECT * FROM" table "означает концептуально проекцию, которая не имеет чистого эффекта. Фильтрация - это 'WHERE' часть SQL-запроса. – hvd