是否有可能在MQL4中实现一个单子模式。 - 页 5

 
sergeev:

这是什么?

这是你要求的。一个类的实例......有一个外部修改器。当然,这是很荒谬的。但是...

这就是你所说的。但我觉得这没有必要。

sergeev:

但是把一个结构的实例做成外置的不是一个好主意吗?

我完全不明白extern与此有什么关系?我不需要 "制造 "一些可以共享的数据,所以它们可以被纳入任何其他的类中。而且这些变量在程序执行 过程中不能丢失其数值,即它们必须是静态的。你在告诉我关于外部的事情。为了什么?

 
hoz:

这是你要求的。一个类的实例......有一个外部修改器。当然,这是很荒谬的。但是...

它根本没有编译吗?


我不需要 "制造 "一些数据来分享。
像你需要的?
 
sergeev:

它根本没有编译吗?

我还没有检查。因为需要的东西还没有实施。

sergeev:

你需要什么?

我将重复我需要的东西...有一个结构,其成员在程序执行 期间必须保存其值,但当访问任何使用该结构的类的任何方法时,成员可以被修改。我理解他们需要静态的。这些成员应该在一个单一的实例中。这个结构的成员将被许多类和专家顾问本身所使用。

以前是这样的。

struct Symbol_Properties
{
   static datetime    gdt_Quote;           // Время поступления последней котировки
   static double      gda_Price [2];       // Текущие рыночные цены (0 - Bid, 1- Ask)
   static double      gd_Spread;           // Размер спреда в пунктах
   static double      gd_Swap;             // Своп
   static double      gd_Comission;        // Комиссия
   static double      gd_Pt;               // Величина одного пункта
   static int         gi_Digits;           // Количество знаков в цене после запятой
   static int         gi_StopLevel;        // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктах
   static int         gi_FreezLevel;       // Уровень заморозки ордеров в пунктах
};

Symbol_Properties::gdt_Quote = 0;
Symbol_Properties::gda_Price [2] = {0.0, 0.0};
Symbol_Properties::gd_Spread = 0;
Symbol_Properties::gd_Swap = 0;
Symbol_Properties::gd_Comission = 0;
Symbol_Properties::gd_Pt = 0;
Symbol_Properties::gi_Digits = 0;
Symbol_Properties::gi_StopLevel = 0;
Symbol_Properties::gi_FreezLevel = 0;

但是,在这种情况下,引用这种变量是不方便的,因为 "名称 "很长。I.e:

Symbol_Properties::gd_Pt = 0;

如何实现这一点?

 
hoz:

让我重复一下我需要的东西...有一个结构,其成员在程序执行期间必须保存其值,但当访问任何使用该结构的类的任何方法时,成员可以被修改。我理解他们需要静态的。这些成员应该在一个单一的实例中。这个结构的成员将被许多类和专家顾问本身所使用。

指向单一创建的变量的问题是什么?

 

并以STRUCTURE NAME.MEMBER NAME来指代它们?

但是否能保证这个变量在运行时 不会丢失其当前值?

 
hoz:

并通过STRUCTURE NAME.MEMBER NAME来引用它们 ?

变量名称。成员名称。


但是否能保证这个变量在程序执行过程中不会丢失其当前值?

例如,总部?

你在EA中是否有多线程执行?

你写在那里的东西,为什么会失去?

 
в чем проблема обращаться к единственной созданной переменной?

每个人都有权利生活在自己的幻想世界里。

但要摧毁用户的世界异常困难

因为你无法进入他的大脑,搞清楚他在想象什么。

"不会失去其目前的价值"- 你认为变量的产生是为了失去它们的价值?

这在现实中。

变量有一个 范围,一个存储期限和一个联系。

了解它是什么:哪个变量有什么范围,什么时候可见,什么时候创建,什么时候销毁,在什么地方和什么时候可以传递给它。

简要介绍一下存储寿命。
静态(在所有函数之外声明的变量或带有静态指定符)--死亡时间=程序存在的终止

自动(一个在函数中声明的变量)--死亡时间=离开创建它的函数的地方

动态(使用关键字new创建的变量)- 死亡时间=使用关键字delete

 
sergeev:

你在EA中是否有多线程?

你放在那里的东西就会在那里,为什么要失去呢?


打开这里的 文档,看到的是。

//+------------------------------------------------------------------+
//| Класс "Анализатор текстов"                                       |
//+------------------------------------------------------------------+
class СParser
  {
public:
   static int        s_words;
   static int        s_symbols;
   //--- конструктор и деструктор
                     Parser(void);
                    ~Parser(void){};
  };
...
//--- инициализация статических членов класса Parser на глобальном уровне
int CParser::s_words=0;
int CParser::s_symbols=0;

如果类或结构变量在程序执行过程中不会丢失它们的值,为什么它们在这里被声明为静态变量?

他们是在公共部分,你可以说是在结构...

 
hoz:

打开这里的 文档,看到的是。

如果类或结构变量在运行时不会丢失它们的值,为什么 它们在这里被声明为静态?

他们是在公共部分,你可以说是在结构...


然后...请阅读给你的链接中的第二句话。

类中的静态与函数中的静态含义略有不同。

 
hoz:

如果类或结构变量在运行时不会丢失它们的值,为什么它们在这里被声明为静态变量?

他们在公共部分,你可以说是在结构...


你要么是愚昧无知,要么是愚昧无知,抱歉我直言不讳,但这是白纸黑字写的。

例如,我们有一个用于解析文本CParser,我们需要计算所处理的单词和字符的总数。 只需声明 所需的类成员为静态成员并 全局初始化即可然后该类的所有实例 在工作时将使用通用的单词和字符计数器

凡是有提及的地方。

类或结构变量在运行时丢失其值

它说,保留OOP原则,不创建全局变量,我们可以在静态类成员的帮助下计算一些单词的数量。

(静态类成员) 是作为一个单一的实例被创建的,并不取决于有多少个特定类的对象被创建。