旧c ++精密工厂

时间:2015-08-10 12:32:31

标签: c++ factory c++03

我需要在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++ preprocessor conditional parameter

1 个答案:

答案 0 :(得分:4)

我认为最干净的方法是使用X Macro实现:

#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