首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++智能工厂设计

C++智能工厂设计
EN

Stack Overflow用户
提问于 2015-07-30 12:52:19
回答 1查看 170关注 0票数 0

不是c++11

我需要用c++编写一个工厂,其工作方式如下:

1)创建的元素是对象块

2)工厂保存对所有这些子对象的引用。

3)砌块具有可缩放性。

意思:

代码语言:javascript
复制
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(...)

这个是可能的吗?它似乎是通过反射来完成的,但是我想要一些非反思的方式,静态地这样做。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-07-30 13:20:51

以下可能会有所帮助:

代码语言:javascript
复制
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;
    }
};

为了简单起见:

代码语言:javascript
复制
using MyBlock = BlockT<MemberType, MemberType, MemberType2>;
using MyFactory = typename MyBlockT::Factory;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31724320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档