c++ - C++ 自注册类成员
问题描述
我正在寻找一种方法来实现以下目标:客户端类foo
要么继承自一个名为的类,要么properties
将其用作类成员。客户端类foo
也可能有零个或多个 type 成员property
。每个成员都应该使用客户端类property
的实例自行注册:properties
struct foo :
properties
{
property<int> x;
property<int> y;
};
这个想法是允许客户端类指定任意数量的属性,这些属性会自动“收集”以进行进一步处理,例如序列化,以便客户端类的作者不需要手动枚举/迭代每个属性。
我可以使用哪些技术来实现这一目标?我知道在静态工厂注册自己的自注册类的模式,但是如何在同一客户端类中的特定实例上自动实现自注册?这甚至可能吗?鉴于Q_PROPERTY
做类似的事情应该有办法做到这一点?
任何达到 C++20(至少目前在 GCC 10.2 中可用的)都可以。
这个问题是对我以前的问题的更具体的问题。
解决方案
一个简单的设计可以是:
- 属性派生自一个公共基类,它们本身就是它们的类型(例如 int、string、..)的模板化包装器
- 财产持有人有财产地图,例如
std::map<std::string, Property*> properties;
- 属性的构造函数将指向持有者的指针作为参数,向持有者自我注册
Herbstluftwm (C++11) 的一个例子:
推荐阅读
- react-native - 将参数传递给嵌套导航器
- c++ - C++如何调用D'tor?
- flutter - Flutter android 模块化依赖问题
- css - 是否有 (CSS) 过滤器可以在另一张图片上剪掉一张图片的轮廓?
- node.js - 如何在执行 findOneAndDelete 之前获取 _id
- python - 在 Django 中过滤多个模型
- xquery - 无法使用 XQuery 和 eXist-db 将文本显示到段落中
- javascript - 对象构造函数
- javascript - 在 Cordova for Android 上,一系列简短的 HTML5 视频有时有声音但没有图片,除非在播放期间有用户交互
- javascript - 如果另一个 div 有一个类,则将类添加到 div