旧的c++高级工厂
Old c++ Sophisticated Factory
我需要在c++ 03中编写一个工厂,工作方式如下:
1)创建的元素是对象块
2)工厂保存对所有这些子对象的引用。
3)块是可扩展的
的意义:
class Block{
MemberType member1;
MemberType member2;
MemberType member3;
Block(){...}
}
class Factory{
set<MemberType*> members1;
set<MemberType*> members2;
set<MemberType*> members3;
Block& makeBlockInstance(){
Block& currentBlock = *(new Block());
members1.push_back(&(currentBlock.member1));
members2.push_back(&(currentBlock.member2));
members3.push_back(&(currentBlock.member3));
return currentBlock;
}
}
- 请不要介意语法错误或小细节,代码是为了表明观点。
我需要的是一种从Block
中添加或删除成员的方法,以这种方式自动创建或删除set<MemberType*> members#
和members#.push_back(...)
。
这可能吗?这似乎是通过反射完成的,但我想要一些非反射的方式,静态地做到这一点。
我希望看到一种非预处理器的方式来做到这一点。
在此之前(如果有的话)-下面是如何使X宏展开有条件c++预处理器条件参数
我认为最干净的方法是使用X宏实现:
#define MEMBERS
X(member1)
X(member2)
#define X(m) MemberType m;
MEMBERS
#undefine X
#define X(m) set<MemberType*> m;
MEMBERS
#undefine X
#define X(m) m.push_back(&(currentBlock.m));
MEMBERS
#undefine X
如果您希望成员具有不同的类型,您可以将其更改为:
#define MEMBERS
X(int, member1)
X(vector<char>, member2)
#define X(t, m) t m;
MEMBERS
#undefine X
#define X(t, m) set<t *> m;
MEMBERS
#undefine X
#define X(t, m) m.push_back(&(currentBlock.m));
MEMBERS
#undefine X
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用Unique_ptr确保工厂中的对象唯一
- 带有继承的C++工厂
- 高级选择排序 - 在一次迭代中搜索两个元素
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- 对于使用高级服务的分钟数和应付金额,我不断得到相同的数字
- 工厂方法:分配和strcpy_s的差异
- C++库和自注册类:客户端应用程序中的工厂映射为空
- 这个工厂类在这个C++视频中的意义何在?
- C++ 高级代码未给出正确的输出
- 此工厂功能有什么问题?
- 注册对对象工厂的调用会导致段错误
- 工厂设计模式优化
- 在 C++ 中返回新的构造函数(*this)工厂
- 确保在编译期间仅同时使用来自同一工厂的对象
- 在工厂或C++类中包含数据库 .h 文件
- 在基类中编写工厂方法
- WIC 工厂将始终在 Windows7 上为 nullptr("What's a Creel?"教程中使用)
- 旧的c++高级工厂