我有一些操作数据库的代码,为此它需要一个类来将表的行转换成。
下面是我现在拥有的有关类的 .h
文件的一部分,及其原型(prototype),然后在 .cpp
文件中定义:
namespace A {
namespace B {
namespace C {
class recEvent
{
public:
struct filedEvent
{
int id;
std::string title;
std::string desc;
std::string stime;
std::string dur;
int recid;
int venid;
};
recEvent();
recEvent(int recid, std::string title, std::string description, int duration,
recurringType recurType, time_t startFrom, endType endingType,
time_t dateEnd, int occurences, int venueid);
void setId(int recid);
void setTitle(std::string title);
// ...
int getId();
std::string getTitle();
// ...
};
} // A
} // B
} // C
然后我在这个 header 中有处理数据库的原型(prototype)函数,我遇到的问题是这些函数不处理 RecEvent
中的任何值,但是它们使用 recEvent
类工作[比如创建类型为 recEvent
的 vector ]。
只是问一个问题,在哪里最好声明/定义这些函数,它们并不特别需要在一个类中,只是一堆函数一起工作来做一些数据库查询,比如所以:
类头recEv
中的公共(public)fetchRecEv()
方法原型(prototype):
std::vector<recEvent> fectchRecEv();
.cpp
定义:
std::vector<recEvent> recEvent::fetchRecEv()
{
Pocco::Data::Session* db_session = this->platform->getLocalInterfaceSession();
Statement ss(*db_session);
std::vector<recEvent> allRecEv;
ss < "SELECT Id,Title,Description,Duration,RecurringType,StartFrom,EndType,DateEnd,Occurences,Venueid FROM RecurringEvents", now;
Poco::Data::RecordSet RecordSet(ss);
for (auto& record : RecordSet) {
/*recEvents made and put in vector allRecEv*/
}
return allRecEv;
}
我很想保持 recEvent
类简单,并专门为这些数据库函数创建另一个 .h
文件,但是这些函数不需要类,所以我不确定该怎么做。
最佳答案
自由函数是 C++ 中的一等公民。如果没有理由让 fetchRecEv
成为 class RecEvent
的成员,那么它完全可以成为一个自由函数。
然而,该函数显然与 class RecEvent
直接相关,这是支持共享同一 header 的论据。如果您将 fetchRecEv
放在它自己的 header 中,那么该 header 仍需要包含声明 class RecEvent
的 header 。嵌套 header 并不是真正的改进。
@Azeem 建议使用 Utils
命名空间。这可能是个坏主意。将自由函数保留在它们逻辑上所属的命名空间中是一种很好的 C++ 做法。当您需要 Argument-Dependent Lookup 时,这变得必不可少。在“utils”命名空间中定义 operator+
根本行不通。
关于c++ - 函数和方法的放置和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52075563/