小编Sal*_*Haq的帖子

具有异构构造函数约束的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...
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 = Class1args = ["arg11, "arg12"].

那么如何用C++中的异构约束来实现工厂模式呢?

除了Boost之外还有其他我忽略过的可能有帮助的图书馆吗?

是否有可能实现这一点,唯一的依赖是标准库(即没有Boost)?

此外,在构造函数参数是复杂类型的情况下,它必须从其JSON表示中特别构造,它如何影响问题的复杂性?

c++ templates boost dispatcher factory-pattern

6
推荐指数
2
解决办法
1168
查看次数

如果服务器崩溃,Websocket onclose/onerror事件不会触发

我在Firefox 4和Chrome 7中观察到以下行为:

如果运行websocket守护程序的服务器崩溃,重新启动,丢失网络连接等,则不会在客户端触发'onclose'或'onerror'事件.我希望在连接因任何原因被破坏时触发其中一个事件.

但是,如果守护程序首先干净地关闭,则会触发'onclose'事件(如预期的那样).

当守护程序未正常关闭时,为什么客户端将websocket连接视为打开?

我希望依靠预期的行为来通知用户服务器已不可用或客户端的Internet连接已中断.

websocket

3
推荐指数
1
解决办法
2798
查看次数

标签 统计

boost ×1

c++ ×1

dispatcher ×1

factory-pattern ×1

templates ×1

websocket ×1