我正在实现一个C++程序,该程序可以编程实例化给定输入文件的对象,该输入文件提供要传递给构造函数的类名称和参数。具有异构构造函数约束的C++工厂模式
这些类是从一个公共基类派生的,但它们的构造函数签名有所不同。
它们的声明如下:
class Base { ... }
class Class1 : Base { Class1(int a1, int a2); }
class Class2 : Base { Class2(int a1, int a2, int a3); }
... and so on...
的参数类型没有为int的,事实上,他们可以是任何内置类型或复杂的自定义类型。
程序输入可能看起来像这样以JSON形式:
[
{ "Class1": ["arg11", "arg12"] },
{ "Class2": ["arg21", "arg22", "arg23"] },
...and so on...
]
阅读过的文档进行Boost.Functional/Factory看来,它可以解决我的问题,如果不是事实,我的应用程序构造函数签名的变化(异质性约束)。 Boost.Function/Factory的方法是规范化构造函数签名,但这在我的应用程序中是不可行的。
在像Python这样的动态语言中,这将是相当平凡的:obj = klass(*args)
其中klass = Class1
和args = ["arg11, "arg12"]
。
那么如何实现工厂模式与C++中的异构约束呢?
除了Boost以外,还有其他的库,我忽略了这可能是有帮助的吗?
是否有可能实现这样的唯一依赖项是标准库(即不提升)?
此外,在构造函数参数是复杂类型的情况下,它必须从其JSON表示特别构造,它是如何影响问题的复杂性的?
供将来参考,均匀的相对是异质 –
嘿塞特, “不均匀”也根据韦氏字典一个有效字,并且在意义“不同”的相似。 我选择了前者,因为这也是Boost.Function/Factory文档的选择(请参阅我的文章中的链接)。 –
是的,我知道,你可以添加“in”或“un”几乎任何单词,它仍然是一个单词。这听起来很奇怪。 –