我正在实现一个C++程序,它可以在给定输入文件的情况下以编程方式实例化对象,该文件提供传递给构造函数的类名和参数.
这些类派生自一个公共基类,但它们的构造函数签名各不相同.
它们声明如下:
class Base { ... }
class Class1 : Base { Class1(int a1, int a2); }
class Class2 : Base { Class2(int a1, int a2, int a3); }
... and so on...
Run Code Online (Sandbox Code Playgroud)
参数类型不必是int,实际上它们可以是任何内置类型或复杂的自定义类型.
程序输入看起来像JSON格式:
[
{ "Class1": ["arg11", "arg12"] },
{ "Class2": ["arg21", "arg22", "arg23"] },
...and so on...
]
Run Code Online (Sandbox Code Playgroud)
通过Boost.Functional/Factory的文档阅读它似乎可以解决我的问题,因为它不是因为在我的应用程序中构造函数签名变化(异构性约束).Boost.Function/Factory的方法是规范化构造函数签名,但这在我的应用程序中是不可能的.
在像Python这样的动态语言中,这将是相当微不足道的:obj = klass(*args)where klass = Class1和args = ["arg11, "arg12"].
那么如何用C++中的异构约束来实现工厂模式呢?
除了Boost之外还有其他我忽略过的可能有帮助的图书馆吗?
是否有可能实现这一点,唯一的依赖是标准库(即没有Boost)?
此外,在构造函数参数是复杂类型的情况下,它必须从其JSON表示中特别构造,它如何影响问题的复杂性?
我在Firefox 4和Chrome 7中观察到以下行为:
如果运行websocket守护程序的服务器崩溃,重新启动,丢失网络连接等,则不会在客户端触发'onclose'或'onerror'事件.我希望在连接因任何原因被破坏时触发其中一个事件.
但是,如果守护程序首先干净地关闭,则会触发'onclose'事件(如预期的那样).
当守护程序未正常关闭时,为什么客户端将websocket连接视为打开?
我希望依靠预期的行为来通知用户服务器已不可用或客户端的Internet连接已中断.