dingmaotu / mql-zmq

ZMQ binding for the MQL language (both 32bit MT4 and 64bit MT5)
Apache License 2.0
544 stars 298 forks source link

socket.mqh里面提到的Context工厂方法指的是哪一个方法? #3

Closed hohomi closed 7 years ago

hohomi commented 7 years ago

socket.mqh里面提到:

it is not recommended to use this constructor directly: use Context factory methods instead

我在context.mqh里找不到这个工厂方法。

我对zeromq还不是特别熟悉,我之前只用过pyzmq。这里提到的工厂方法是不是像pyzmq的context.socket(zmq.PUB)?但是不知道在您的mql-zmq这个工厂函数叫什么?

dingmaotu commented 7 years ago

多谢反馈,这个comment已经没用了,我会去掉。

之前的版本有一些工厂方法,因为Context直接可以访问底层的C指针,创建Socket需要这个指针。而MQL没有friend类,所以无法让Socket直接访问Context包装的内部指针。因此就定义了一些方法直接构造各种类型的Socket。但是MQL又不支持返回引用,所以工厂方法只能返回Socket指针,这样又无法创建栈分配的Socket,给内存管理带来很大麻烦。因此作为妥协,让Context直接通过ref方法暴露了内部指针,这样整体的API好用了很多。

hohomi commented 7 years ago

原来您之前已经做了那么多版本!看得出MQL与C++相比有太多局限性,不得不做出很多调整! 您现在这套API设计简洁又很好用。