当前我有
Class ModelFac: public Singleton <ModelFac>{
public:
friend class Singleton <ModelFac>;
ModelFacPtr CreateModelA (bool buy, std::string ccy, const std::string& str){
//some implementations here
}
ModelFacPtr CreateModelB (bool buy, std::string useful_ccy){
//other implementations
}
};
当我想调用函数时,我将调用ModelFac::Instance().CreateModelA(a,b,c)
。这些函数在不同的.cc
文件中被调用。但是,当我添加新的CreateModelC
函数时,所有调用ModelFac::Instance().CreateModelX(a,b,c,d,e)
的文件都需要重新编译,因为它们都包含ModelFac.h
,这确实很耗时。
我可以以某种方式解决此问题,但仍将ModelFac::Instance().CreateModelA(a,b,c)
这种呼叫格式留给实施吗?
我不想为不同的CreateModel
函数创建不同的类,这会在整个程序中引起很多修复。如果我仍然可以使用ModelFac::Instance()
,然后将CreateModelA
用作第一个参数,那就太好了。
谢谢。
答案 0 :(得分:0)
只需在您的.Length -1
类中添加一个新的 general 方法Public Sub ListVideosOnPage(ByVal VidCatName As String, ByVal VidCatURL As String)
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
XMLReq.Open "GET", VidCatURL, False
XMLReq.send
If XMLReq.Status <> 200 Then
MsgBox "Problem" & vbNewLine & XMLReq.Status & " - " & XMLReq.statusText
Exit Sub
End If
HTMLDoc.body.innerHTML = XMLReq.responseText
Dim aNodeList As Object, link As Long
Set aNodeList = HTMLDoc.querySelectorAll(".bpTable a")
For link = 0 To aNodeList.Length - 1
Debug.Print aNodeList(link).innerText, aNodeList(link).href
Next
End Sub
(我假设类型CreateModel
应该为ModelFac
命名,但这对我的解决方案并不重要):
ModelFacPtr
这是ModelPtr
接口(当然,您需要在class ModelFac : public Singleton<ModelFac> {
public:
...
ModelPtr CreateModelA(bool buy, std::string ccy, const std::string& str) {...}
ModelPtr CreateModelB(bool buy, std::string useful_ccy) {...}
ModelPtr CreateModel(Creator& creator) { return creator.Create(); }
};
类之前声明它):
Creator
每次您要创建一种新型的模型时,例如模型ModelFac
,只需编写一个新的class Creator {
public:
virtual ModelPtr Create() = 0;
};
类:
C
现在,要创建模型Creator
,请输入:
class CCreator : public Creator {
public:
CCreator(bool buy, std::string foo, int bar)
: m_buy(buy), m_foo(foo), m_bar(bar) {}
ModelPtr Create() {
// use m_buy, m_foo, and m_bar to create and return the model
}
private:
bool m_buy;
std::string m_foo;
int m_bar;
};
如您所见,C
类不会在每次使用新的ModelFac::Instance().CreateModel( CCreator(true, "haha", 777) );
类型时被修改。您需要编写一个新的ModelFac
类。