c++ - 函数和方法的放置和使用

标签 c++ function methods

我有一些操作数据库的代码,为此它需要一个类来将表的行转换成。

下面是我现在拥有的有关类的 .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/

相关文章:

javascript - JavaScript 中的 true/false 与 int(意外行为)

c++ - 在 C 或 C++ 中返回结构是否安全?

c# - C# 中的属性名称和方法名称可以相同吗?

c++ - 如何在 C++ 中创建指向(或引用)同一类的另一个成员函数的成员函数

c++ - MPI_Gather 的段错误

c++ - 嵌套静态链接库和一个可怕的错误

swift - 从函数中检索结果(Swift/WatchOS 2)

java - 更正 Book 类以获取 getBooksByAuthor 方法的输出

c++ - 一个 Action 序列中的多个节点

c++ - 双指针段错误