#define CLASS(NAME,FUNC) class NAME : public CStrategy{\
public:\
NAME(SStrategySettings &set):CStrategy(set){ }\
virtualvoid NextStepStrategy(void) {FUNC;}}
//____________________________________________________________________
#define CLASS(NAME,FUNC) class NAME : public CStrategy{\
public:\
NAME(SStrategySettings &set):CStrategy(set){ }\
void NextStepStrategy(void) override{FUNC;}}
UPD。
不是的,是为权限控制本身准备的,不需要公开的方法。
#define CLASS(NAME,FUNC) class NAME : public CStrategy{\
private:\void NextStepStrategy(void) override {FUNC;}\
public:\
NAME(SStrategySettings &set):CStrategy(set){ }}
看了看我与OOP风格的代码斗争的结果--嗯......。优秀的!))))
我有一个问题,但在我的代码中,嗯,确切地说,有三次,我使用了这样的结构。
所有的调用都在私有方法中,但是在源代码中是否有一个 "绝地方法?"来摆脱CheckPointer(m_order)==POINTER_INVALID的困扰?
我问的是一些获取/设置
没有特别的问题,但可以说是心血来潮,或者说在对C++中的OOP方法的渴求还没有减弱的时候
如果问题是 "许多字母",那么!CheckPointer(mPtr),如果函数调用,你在构造函数中将所有指针初始化为NULL,并在代码中与之比较,删除ptr时不要忘记;ptr=NULL。
看了看我与OOP风格的代码斗争的结果--嗯......。优秀的!))))
我有一个问题,但在我的代码中,嗯,确切地说,有三次,我使用了这样的结构。
所有的调用都在私有方法中,但是在源代码中是否有一个 "绝地方法?"来摆脱CheckPointer(m_order)==POINTER_INVALID的困扰?
我问的是一些获取/设置
没有特别的问题,但可以说是心血来潮,或者说在对C++中的OOP方法的渴求还没有减弱的时候
伊戈尔,看看这个例子,我想这就是你要问的。
如果问题是 "许多字母",那么!CheckPointer(mPtr),如果在一个函数调用 中,你在构造函数中将所有指针初始化为NULL,并在代码中与之比较,不要忘记在删除ptr时;ptr=NULL。
嗯,还有这个,用来装糖。
没有特别的问题,但可以说是心血来潮,或者说趁着学习C++中的OOP方法的渴求还没有消退。
我强烈建议你在构造函数中用默认值初始化类的所有字段。关键是,如果你想这样做。
void foo(){ CClass someClass; someClass.DoSomething(); }
没有人将初始化你的类的字段,而且会有垃圾值。
而这个,是为了糖。
不,我几乎已经放弃了定义,我只是不想包装任何东西,正如我几周前写的那样--我想暂时看到纯OOP风格的代码,评估灵活性和可能性
HH:我只是在创建时用define包装了后裔,而不是在3行上写同样的初始化,这样以后添加方法就更容易了,也就是说,到目前为止在源代码中只有一行。
伊戈尔,看一下这个例子,我想这就是你要问的。
不,我指的是c#中的等价物--操作符?(null-join操作符),我想在C++风格的逻辑中看到类似的东西
UPD。
我强烈建议在构造函数中用默认值初始化一个类的所有字段。关键是,如果你想做
如果你要求的是一个宏,没有人会初始化你的类的字段,而且会有垃圾值。
这就是我所做的,构造函数初始化基类中的任何东西,子类初始化基类。
这就是我把它包装在一个宏中的原因,这样我就不会忘记正确地初始化))))。
不,我几乎已经放弃了定义,我只是不想包装任何东西,正如我几周前写的那样--我想暂时看到纯OOP风格的代码,评估灵活性和可能性
ZS:在创建时只在定义中包装后裔,不要在3行上写同样的初始化,以后添加方法更容易,即在源代码中暂时只写一行。
不,我指的是c#中的等价物--操作符?(null-join操作符),我想看到类似于C++风格的逻辑的东西
你对预处理程序的拒绝是徒劳的。与模板一起,它们是最强大的工具。似乎没有类似于"?"的运算符。在这方面,C++是比较硬核的。
我还在为纯粹的OOP风格而战斗,我想学习所有的OOP技术,同时在论坛上有一个资产;)
我已经掌握了预处理程序的速度,但...我想我不应该滥用它,至少,不是我的风格,我可能会搞砸,而且我肯定无法阅读有多个宏替换的代码,如何寻找bug......嗯,这更容易重写--所以,还没有必要
模板...好吧,我不喜欢开发商在SB中提供的东西,我都看了一遍,很难说他们被纳入SB的目的是什么,也许他们的时代还没有到来。
关于C++模板移植到MQL - 现在是时候了,正如讨论所显示的,在大多数情况下,C++模板需要为MQL进行微调 - 回到.dll更容易,不用麻烦MQL ))))。
我还在为纯粹的OOP风格而战斗,我想学习所有的OOP技术,同时在论坛上有一个资产;)
我已经掌握了预处理程序的速度,但...我想我不应该滥用它,至少,不是我的风格,我可能会搞砸,而且我肯定无法阅读有多个宏替换的代码,如何寻找bug......嗯,这更容易重写--所以,还没有必要
模板...好吧,我不喜欢开发商在SB中提供的东西,我都看了一遍,很难说他们被纳入SB的目的是什么,也许他们的时代还没有到来。
关于C++模板移植到MQL - 现在是时候了,正如讨论所显示的,在大多数情况下,C++模板需要为MQL进行微调 - 回到.dll更容易,不用麻烦MQL ))))。
这样你就可以自己写模板了))))。
Yup ))))
我已经看完了帮助,跳过了覆盖,感谢上帝,所有的东西都在宏中,编辑,嗯,正是在一个复制粘贴中
UPD。
不是的,是为权限控制本身准备的,不需要公开的方法。
然后还有这个,是为了糖。
我想写下我曾经拥有的东西,而不是
它是这样的。
但记得如何在MQL中检查宏替换的问题
2019.09.16 22:57:42.837 tst (EURUSD,H1) a = 1
2019.09.16 22:57:42.837 tst (EURUSD,H1) POINTER_INVALID= 0
2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0
如果我没记错的话,在年初的时候,可以把NULL解压到日志中,得到0,现在出现了一个错误
也就是说,NULL的行为在未来不应该改变,但是用什么来代替NULL就不清楚了,可能如果现在检查这种情况,就像写的if(CheckPointer(m_order)==POINTER_INVALID)),可以 说是正确的代码)