旧的c++高级工厂

Old c++ Sophisticated Factory

本文关键字:工厂 高级 c++ 旧的      更新时间:2023-10-16

我需要在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