C++ sqlselect通常是如何实现的
我有两节课C++ sqlselect通常是如何实现的,c++,select,C++,Select,我有两节课 class PopulationMember { public: void operationOnThisMember1(); void operationOnThisMember2(); ... private: Population* populaltion_; } class Population { public: void operationOnAllMembers1(); void operationOnAllMemb
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_;
}
bool selected_;
标记到每个PopulationMember还有第三种更好的方法吗?我将采取的方法是向整个集合公开迭代器接口。为了实现某种选择,我将使用迭代器适配器,例如,一元谓词适配器,它提供了范围的新视图。这样,在创建单独的集合时既不会影响存储对象,也不会产生任何开销。如果您看看Boost的迭代器适配器,您可能已经获得了所需的大部分功能。我将采取的方法是向整个集合公开迭代器接口。为了实现某种选择,我将使用迭代器适配器,例如,一元谓词适配器,它提供了范围的新视图。这样,在创建单独的集合时既不会影响存储对象,也不会产生任何开销。如果您查看Boost的迭代器适配器,您可能已经获得了所需的大部分内容。我从未看过,但我希望它将是方法1。请参阅以确认我的期望值。:-) 我从来没有看过,但我希望是方法1。请参阅以确认我的期望值。:-) 这是一个基于类似我曾经做过的事情的建议,这是您第一种方法的扩展形式。 优点是使用STL的概念,并且可以自由地实现许多函子或很少的可参数化函子
class All
{
public:
bool operator()(const PopulationMember* entity) const
{
return true;
}
};
class AscByID
{
public:
bool operator()(const PopulationMember* a, const PopulationMember* b) const
{
return a->getId() < b.getId();
}
};
template<typename Entity, class Predicate, class SortComparator>
class Query
{
public:
typedef std::set<Entity, SortComparator> ResultSet;
Query(const Predicate& predicate = Predicate(), const SortComparator& cmp = SortComparator()) :
predicate(predicate), resultSet(cmp)
{
}
bool operator()(const Entity& entity)
{
if (predicate(entity))
{
resultSet.insert(entity);
return true;
}
return false;
}
const ResultSet& getResult(void) const
{
return resultSet;
}
void clearResult(void)
{
resultSet.clear();
}
private:
Predicate predicate;
ResultSet resultSet;
};
int main()
{
Query<const PopulationMember*, All, AscByID> query;
Popuation::execute(query);
//do something with the result
query.getResult();
//clear the result
query.clearResult();
//query again
Popuation::execute(query);
//do something useful again
return 0;
}
全部分类
{
公众:
布尔运算符()(常量填充成员*实体)常量
{
返回true;
}
};
类AscByID
{
公众:
布尔运算符()(常量填充成员*a,常量填充成员*b)常量
{
返回a->getId()
这是一个基于类似我曾经做过的事情的建议,这是您第一种方法的扩展形式。
优点是使用STL的概念,并且可以自由地实现许多函子或很少的可参数化函子
class All
{
public:
bool operator()(const PopulationMember* entity) const
{
return true;
}
};
class AscByID
{
public:
bool operator()(const PopulationMember* a, const PopulationMember* b) const
{
return a->getId() < b.getId();
}
};
template<typename Entity, class Predicate, class SortComparator>
class Query
{
public:
typedef std::set<Entity, SortComparator> ResultSet;
Query(const Predicate& predicate = Predicate(), const SortComparator& cmp = SortComparator()) :
predicate(predicate), resultSet(cmp)
{
}
bool operator()(const Entity& entity)
{
if (predicate(entity))
{
resultSet.insert(entity);
return true;
}
return false;
}
const ResultSet& getResult(void) const
{
return resultSet;
}
void clearResult(void)
{
resultSet.clear();
}
private:
Predicate predicate;
ResultSet resultSet;
};
int main()
{
Query<const PopulationMember*, All, AscByID> query;
Popuation::execute(query);
//do something with the result
query.getResult();
//clear the result
query.clearResult();
//query again
Popuation::execute(query);
//do something useful again
return 0;
}
全部分类
{
公众:
布尔运算符()(常量填充成员*实体)常量
{
返回true;
}
};
类AscByID
{
公众:
布尔运算符()(常量填充成员*a,常量填充成员*b)常量
{
返回a->getId()
选择
不是用于过滤,而是用于投影。请问,投影到底是什么意思?我想实现过滤功能。投影基本上是将结构A转换为结构B(其中A和B可能是相同的结构,但通常不是)。例如,从“表”
中选择“a”以排除所有其他列。SQLSELECT
语法始终需要投影<代码>从“表”中选择*在概念上是一种无净效果的投影。过滤是SQL查询的部分,其中是SQL查询的一部分。SELECT
不是用于过滤,而是用于投影。请问,投影到底是什么意思?我想实现过滤功能。投影基本上是将结构A转换为结构B(其中A和B可能是相同的结构,但通常不是)。例如,从“表”
中选择“a”以排除所有其他列。SQLSELECT
语法始终需要投影<代码>从“表”中选择*
在概念上是一种无净效果的投影。过滤是SQL查询的部分,其中
。