c++智能工厂设计
C++ Smart Factory Design
Not 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(...)
。
这可能吗?这似乎是通过反射完成的,但我想要一些非反射的方式,静态地做到这一点。
谢谢。
以下内容可能有所帮助:
template<typename ... Ts> struct BlockFactoryT;
template<typename ... Ts>
struct BlockT
{
using Factory = BlockFactoryT<Ts...>;
BlockT(){...}
std::tuple<Ts...> members;
};
template<Ts...>
struct BlockFactoryT{
using Block = BlockT<Ts...>;
std::tuple<set<Ts*>> members_sets;
std::unique_ptr<Block> makeBlockInstance()
{
return makeBlockInstanceImpl(std::index_sequence_for<Ts...>());
}
template<std::size_t ... Is>
std::unique_ptr<Block> makeBlockInstanceImpl(std::index_sequence<Is...>)
{
auto block = std::make_unique<Block>();
const int dummy[] = {0,
(std::get<Is>(members_sets).insert(&std::get<Is>(block->members)), 0)...};
static_cast<void>(dummy); // Remove warning for unused variable
return block;
}
};
为简单起见:
using MyBlock = BlockT<MemberType, MemberType, MemberType2>;
using MyFactory = typename MyBlockT::Factory;
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 优先顺序:智能指针和类析构函数
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 使用Unique_ptr确保工厂中的对象唯一
- 带有继承的C++工厂
- 智能指针作为无序映射键,并通过引用进行比较
- 智能指针概念所有权和寿命
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 尝试使用智能指针时引发异常
- 我可以制作指向智能指针的智能指针吗?
- 通过智能指针和转换对基本模板参数进行模板推导
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 从堆栈分配的原始指针构造智能指针
- 工厂:如何将临时智能指针传递给函数.C++
- 工厂函数的最佳智能指针返回类型是什么
- 克隆智能指针vs抽象工厂
- c++智能工厂设计
- 没有指针(包括智能指针)或副本的高效工厂函数
- 用于智能指针(intrusive_ptr)的抽象基类-处理继承性、多态性、可克隆性和从工厂返回的方法