错误、漏洞、问题 - 页 2272

 
fxsaber:

一个人只被创造。此外,在F,你将不能使用T

这本身就是一个错误。
template<typename T>
void f() { Print( sizeof( T )); }
struct A { int a; };
void OnStart()
{
        f<int>(); //(1)//нормально
        f<A>();   //(2)//нормально
struct B { int b; };
        f<B>();   //(3)//Error: 'B' - undeclared identifier
}
而(1)(2)和(3)的根本区别是什么?
 
fxsaber:

此外,在F,你将不能使用T。总而言之,这种情况对我来说是显而易见的。

此外,违反了你的禁令,在f中使用T

template<typename T>
void f() { class T; Print(__FUNCSIG__, ":" , sizeof(T)); }
template<typename T1, typename T2>
void g() { class T1 { T2 x; } a; f<T1>(); }
void OnStart()
{
class A {};
        g<A,int   >();
        g<A,double>();
}

正如你所看到的,它的编译没有错误,而且只要一切都 "可以解释",结果是荒谬的这一事实并不重要。

 
大家好。帮助。不能做黄金交易,一切都在工作,但我不能做的是交易。以下是它看起来的截图。
附加的文件:
 

这段代码的神圣意义是什么,他们为什么要把它塞进标准库

   if(IsStopped(__FUNCTION__))
      return(false);

现在不可能在OnDeanite中使用标准库中的平仓或下单函数,例如使用REASON_REMOVE。

 
Stanislav Dray:

这段代码的神圣意义是什么,他们为什么要把它塞进标准库

现在你不能在OnDynit中使用标准库中的函数来关闭头寸或订单,例如使用REASON_REMOVE。

是的,那是一个错误。

 
A100:

此外,我违反了你的禁令,在f中使用T

正如你所看到的,它的编译没有错误,而且结果是荒谬的这一事实并不重要--主要的是一切都 "可以解释"。

你不太明白什么是模板。它们与宏类似,只是具有某些特征。

以下是代码

template<typename T>
void f() { class T{ MqlTick a; }; Print(__FUNCSIG__, ":" , sizeof(T)); }
template<typename T1, typename T2>
void g() { class T1 { T2 x; } a; f<T1>(); }
void OnStart()
{
class A {};
        g<A,int   >();
        g<A,double>();
}

.

void f<A>():68
void f<A>():68

这是因为T是一种设置,像宏一样,只是有某些注意事项。我们最后得到的是,一个签名被创造出来。在函数内部,没有人知道A,它在函数中被替换成了T。但你在里面定义了这个A,所以不会再发生编译错误。我在里面插入了MqlTick,以表明这个A与其他同名的类没有关系。

简而言之,MQL5中的内部类在父函数之外是不可见的。只有作为类的类型的名称被传递为T。在这种情况下,该名称没有对父函数的引用。

也就是说,所有的事情在逻辑上都是可以解释的。这不是一个错误,而是这样一个有限的实现。


也许在求职面试时,一个C++程序员会说,这是不可能的。

template<typename T>
void f() { class T{}; }


MQL5是很有可能的。

 
fxsaber:

你不太明白什么是模式。

fxsaber:

ZS 可能一个C++程序员在工作面试中会告诉你这是不可能的

如果你认为这在C++中是不可能的,那就意味着不是我,而是你不了解什么是模板以及它们是如何工作的......更重要的是,你无法区分一个草率的实现和一个受约束的实现。

 
A100:

如果你认为这样的事情在C++中是不可能的--那说明不是我的问题,而是你不了解什么是模板,它们是如何工作的......更是让你无法分辨一个马虎的实现和一个有边界的实现

读一读你给出评论的句子的第一个词。我对MQL5中的模板和宏的理解是这样的:我不用尝试编译就能意识到你的例子在MQL5中是无法编译的。C++ - 我不知道,这并不妨碍它。


如果你能展示C++对这段代码的反应,我将不胜感激

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

fxsaber, 2018.09.03 07:16

ZS 可能一个C++程序员在工作面试中会告诉你这是不可能的

template<typename T>
void f() { class T{}; }
 
fxsaber:

如果你能告诉我C++对这段代码的反应,我将非常感激。

反应与MQL中相同。为什么应该不同呢?一个模板就是一个模板
 
fxsaber:

你并没有真正理解什么是模板。而且它们类似于宏,只是有一些技巧。

是的,这个例子将不会在pluses上编译。

错误:'struct f()::T'的声明在模板参数template<typename T>的阴影下。

但即使它编译了,结果也会让你吃惊,因为类的名字只是 "T"。

如果它在mql中是不同的,这是不正确的。