C++自注册类成员

Joe*_*ann 1 c++

我正在寻找一种方法来实现以下目标:客户端类foo继承自命名的类properties或将其用作类成员。客户端类foo也可能有零个或多个 type 成员property。每个property成员都应该使用properties客户端类的实例自行注册:

struct foo :
    properties
{
    property<int> x;
    property<int> y;
};
Run Code Online (Sandbox Code Playgroud)

这个想法是允许客户端类指定任意数量的属性,这些属性会自动“收集”以进行进一步处理,例如序列化,以便客户端类的作者不需要手动枚举/迭代每个属性。

我可以使用哪些技术来实现这一目标?我知道在静态工厂中注册自己的自注册类的模式,但是如何在同一客户端类中的特定实例上自动实现自注册?这甚至可能吗?鉴于有Q_PROPERTY类似的事情,应该有办法做到这一点?

任何高达 C++20(至少目前在 GCC 10.2 中可用的)都可以。

这个问题是对我之前的问题的一个更具体的问题。

ypn*_*nos 5

一个简单的设计可能是:

  • 属性派生自一个公共基类,并且它们本身是它们类型(例如 int、string、..)的模板化包装器
  • 财产持有者有财产地图,例如 std::map<std::string, Property*> properties;
  • 属性的构造函数以指向持有者的指针作为参数,向持有者自注册

Herbstluftwm (C++11) 的一个例子:

  1. 对象类
  2. 属性类
  3. 具有属性的示例对象:标签在 cpp 中初始化