C++ c++;工厂模式
很抱歉,我的文章太长,但我想提出我试图解决的问题以及实际问题。也许我会被指向另一个,可能更好的方法 我想创建一个eventtriggerred处理程序系统。我将有几个处理程序模块。基本思想是,在初始化期间,这些模块将在事件列表中注册它们处理的事件(register(module,eventItGetsCalledFor))。在触发事件的情况下,将在事件列表中查找该事件,并创建并运行其中列出的所有模块。为了实现这一点,所有模块都有一个接口 我的两个问题是:C++ c++;工厂模式,c++,factory-pattern,C++,Factory Pattern,很抱歉,我的文章太长,但我想提出我试图解决的问题以及实际问题。也许我会被指向另一个,可能更好的方法 我想创建一个eventtriggerred处理程序系统。我将有几个处理程序模块。基本思想是,在初始化期间,这些模块将在事件列表中注册它们处理的事件(register(module,eventItGetsCalledFor))。在触发事件的情况下,将在事件列表中查找该事件,并创建并运行其中列出的所有模块。为了实现这一点,所有模块都有一个接口 我的两个问题是: 因为我只想在实际事件中实例化模块,所以我
class myInterface {
public:
...
static virtual *myInterface builder() = 0; //is static (pure) virtual possible?
};
class example : public myInterface {
public:
...
static virtual *myInterface builder() { return new example(); }
};
然后,我必须在事件列表中存储指向builder()函数的指针,并在事件发生时执行这些函数来创建对象。我想知道是否有办法为每个示例模块编写static virtual*myInterface builder(){return new example();}
。
一种模板方法是如下所示:
模板
静态虚拟*myInterface builder(){返回新的T();}
但是,我不太喜欢它,因为我必须编写以下内容来注册事件的模块:
注册(eventName,builder())
考虑到我只想在每个模块中创建一个静态寄存器函数,如下所示:
class example: public myInterface {
static void registerMe {
register(event1,builder<example>());
register(event2,builder<example>());
...
register(eventn,builder<example>());
}
};
(builder模板实例化参数各不相同),将其作为模板本身也不是一件好事,因为这会让我反复编写register()
那么有没有更方便的方法呢?
(在思考和撰写本文的过程中,我想到了从模板类继承。如果polimorphism与具有不同实例化参数的模板类一起工作。否则,我必须使用接口类,将其包装在模板中并从中继承)template <class Derived>
class myInterface {
public:
...
virtual *myInterface builder() = 0;
Derived* buildDerived()
{
return dynamic_cast<Derived*>(builder());
}
};
模板
类myInterface{
公众:
...
虚拟*myInterface builder()=0;
派生*buildDerived()
{
返回动态_cast(builder());
}
};
//静态(纯)虚拟可能吗
没有
营救
template <class Derived>
class myInterface {
public:
...
virtual *myInterface builder() = 0;
Derived* buildDerived()
{
return dynamic_cast<Derived*>(builder());
}
};
模板
类myInterface{
公众:
...
虚拟*myInterface builder()=0;
派生*buildDerived()
{
返回动态_cast(builder());
}
};
请一次问一个问题。每个SO帖子都是一个问题。很抱歉,第二个问题与第一个问题密切相关。我需要这些指针,以便一个模块可以处理多个与之相关的事件(该接口仅用于一个)。但是,如果有人对eventhandler问题提供了不同的方法,我可能没有理由找到第二个问题的解决方案。因为这个解释很弱,耦合也不是我将来会问的问题,但问题是问的。请一次问一个问题。每个SO帖子都是一个问题。很抱歉,第二个问题与第一个问题密切相关。我需要这些指针,以便一个模块可以处理多个与之相关的事件(该接口仅用于一个)。但是,如果有人对eventhandler问题提供了不同的方法,我可能没有理由找到第二个问题的解决方案。因为这个解释很弱,耦合也不是我将来会问的问题,但是这个问题是问的。非常感谢。现在我知道了要读的名字,知道我猜的是c
template <class Derived>
class myInterface {
public:
...
virtual *myInterface builder() = 0;
Derived* buildDerived()
{
return dynamic_cast<Derived*>(builder());
}
};