【发布时间】:2018-09-21 16:01:08
【问题描述】:
目前我有一个
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 作为第一个参数传递,那就太好了。
谢谢。
【问题讨论】:
-
如果你真的“拥有”它,那么你拥有的不是 C++。请使用复制和粘贴的方式发布真实代码。
-
如果
CreateModelC是一个公共函数,你无能为力,如果它是私有的,那么你可以使用pimpl idiom从头文件中隐藏函数 -
尝试将指针传递给函数或函数对象。
-
@NeilButterworth 该代码属于一个大项目,很难发布所有实现。您实际上“拥有”它是什么意思?你的意思是修复解决方案不存在?
-
不确定 Neil 指的是什么,但作为一个例子,
Class不是 c++ 中的关键字,你也不能在没有编译器向你抛出错误的情况下在签名中写a list of arguments。这似乎是次要的挑剔,但在讨论代码时,查看代码而不是几乎看起来像代码的东西会有所帮助
标签: c++ design-patterns