【发布时间】:2015-07-30 12:52:19
【问题描述】:
不是 c++11
我需要用 c++ 编写一个像这样工作的工厂:
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(...)。
这可能吗? 这似乎是通过反射完成的,但我想要一些非反射的静态方式。
谢谢。
【问题讨论】:
-
您应该使用
std::unique_ptr<MemberType>或std::shared_ptr<MemberType>来存储在集合中,而不是自己管理内存释放/分配。 -
Block可以(可变参数)模板化吗? -
现在,只是为了工厂的理论辩论,一切都很简单。常规指针、常规类型、无模板。
-
我的意思是,这是一个解决方案,它将当前
Block/Factory声明更改为模板可接受(所以Block<Ts...>可能知道它的类型)。 -
可以接受。我希望它会做