C++ 使用 PHP 中的特征

C++ use traits like in PHP

我正在寻找一个解决方案,如何在 C++ 中定义可重用代码,如 PHP 中的特征。

问题描述: 我有三个 classes(Class、Customer、Admin),每个 class 有时必须执行相同的操作,例如插入新的 child、添加新地址或添加new class(与更新和删除操作相同)。我想避免在每个 class 中再次开发这些功能。

此外,如果这些功能与 class "product_name" 分开,我会非常高兴。我不想将所有这些函数都写到 class "product_name" 或 "product" 中,否则 class 对于太多函数来说太混乱了。

编辑
class "product_name" 的名称是我的产品的占位符。目前我不知道我的产品名称:)。 parent class "product" 是我未来想开发的所有产品的集合点。我创建这个 class,因为我想使用 Single-Sign-On 和相同的用户数据库...所以我必须只开发一次这些部分!

Class我的愿望图:

C++ 在很多方面都不同于 PHP。这就是您如何在 C++ 中设计域驱动的 DAO。

此示例使用 POCO 库进行数据库连接。您可以将任何其他库用于同一提议。

enum class Role {
   ADMIN,
   CUSTOMER,
   SCHOOL_ACCOUNT
}

class User {
protected:
  constexpr User(Role role) noexcept:
    role_(role)
  {}
public:
  User(const User&) = delete;
  User& operator=(const User&) = delete; 
  Role role() const noexcept {
   return role_;
  }
  virtual const char* id() const = 0;
  virtual ~User() = 0;
private:
  Role role_;
};

User::~User() 
{} 

class MyIDGenerator {
public:
  static std::string generate() {
    static POCO::UUIDGenerator gen;
    return gen.create().toString();
  }
};

class Customer final: public User  { 
public:
    Customer() noexcept:
       User(Role.CUSTOMER),
       id_(  MyIDGenerator::generate() ) 
    {} 
    virtual const char* id() const override
    {
      return id_.data();
    }
    virtual ~Customer() override
    {}
private:
   std::string id_;
}
...
// define your Admin and School
...
class Product {
 public:
 Product():
   id_( MyIDGenerator::generate() )
 {} 
 void insertUser(const User* user, const Poco::Data::Session& session) {
  // execute your SQL hire i.e. something like
  POCO::Data::Statement insert(session);
  insert << "insert into product_allowed_user values(?,?) << use(id_) << use(user->id());
  insert.execute(); 
 }
 private:
   std::string id_;
}