|
|
1
9
是的,有办法。即使在C++中,C代码也很简单(不检查继承):
这和C代码一样有效。它也是类型安全的:如果您传递的类型不是从brokeredObject继承的(或者不是该类型本身),那么编译器会对返回语句抱怨。但是,它将始终返回一个新对象。 独生子女
正如另一个家伙所建议的(归功于他),这一切看起来非常像一个很好的情况为单身模式。只要做
我已经读过了,您将有机会拥有这些类的多个实例。一种方法是 明顿 (我编造了那个词:)
现在,你只要用
|
|
|
2
5
我将解决这个问题的方法是使用我称之为静态注册表模式,在我的脑海中是依赖注入的C++版本。 基本上,您有一个类型的构建器对象静态列表,用于构建其他类型的对象。 基本的静态注册表实现如下所示:
brokeredobjectbuilder的实现如下所示:
赞成的意见:
欺骗:
上面的实现非常简单,您可以根据您的需求以许多不同的方式扩展它。 |
|
3
3
使用模板类作为代理。
|
|
|
4
3
代替brokeredObject基类中的getInterfaceID(),您可以定义纯虚拟方法:
在派生类中,您将从该方法返回特定派生类的实例,如果它已经创建,如果没有,您将首先创建它,然后返回它。 |
|
|
5
2
看起来您不需要全局对象来进行管理,那么为什么不把所有东西都转移到类本身呢?
|
|
|
6
1
|
|
|
7
1
如果在编译时总是知道类型,那么调用
另一方面,如果您在编译时不知道确切的类型,则可以使用某种类型注册表。
或者,如果启用了RTTI,则可以使用
当然,在任何情况下,每个新类都可以在注册表中进行自注册,从而使注册分散而不是集中。 |
|
|
8
0
几乎可以肯定,您应该使用依赖注入。 |
|
|
9
0
为什么不呢? template
BrokeredObject* GetOrCreateObject()
{
return new T();
}
|
|
|
10
0
我的用例往往会变得更复杂一点——我需要进行一点对象初始化的能力,并且我需要能够根据配置从不同的DLL加载对象(例如,针对硬件的模拟与实际)。它开始看起来像是COM,ATL是我前进的方向,但我不想把COM的重量添加到操作系统中(这是在CE中完成的)。 我最终使用的是基于模板的(谢谢 litb 让我走上正轨),看起来像这样:
然后为了确保对象(因为它们是模板化的)得到编译,我添加了如下定义:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |