#define PRINT(x) Print ( #x, ":" , string (x))
template < typename DATA_TYPE>
struct Wrapper{
uchar type;
DATA_TYPE data;
template < typename T>
voidoperator =(T value){ // при замене данной строки на "void operator=(T &value){" происходит перезапись оператора присвоения в классе наследнике B (код не компилируется).this .data = value;
};
voidoperator =(DATA_TYPE &_data){
this .data = _data;
};
};
struct A{
string data;
voidoperator =( string value){
data = value;
};
};
struct B : Wrapper<A>{};
voidOnStart (){
B b;
string str_value;
b = str_value;
A a;
b = a;
B b1;
b = b1;
}
아래 코드를 사용하면 모든 것이 예상대로 작동합니다. 그러나 기능을 확장하고 클래스 A의 (문자열)과 같은 단순 유형뿐만 아니라 구조에 대한 지원을 추가하려고 하면 기본 클래스의 템플릿 할당 연산자가 상속인 클래스의 기본 할당 연산자를 재정의하기 시작하여 모든 기능을 완전히 죽이는 것으로 나타났습니다. "operator*="와 같은 다른 연산자를 해결 방법으로 사용할 수 있지만 그게 요점이 아닙니다.
개발자: 기본적으로 할당 연산자(복사 생성자)에 대한 강제 코드 생성을 지정하는 기능을 추가하세요.
아래 코드를 사용하면 모든 것이 예상대로 작동합니다.
그러나 기능을 확장하고 클래스 A의 (문자열)과 같은 단순 유형뿐만 아니라 구조에 대한 지원을 추가하려고 하면
기본 클래스의 템플릿 할당 연산자가 상속인 클래스의 기본 할당 연산자를 재정의하기 시작하여 모든 기능을 완전히 죽이는 것으로 나타났습니다.
"operator*="와 같은 다른 연산자를 해결 방법으로 사용할 수 있지만 그게 요점이 아닙니다.
개발자:
기본적으로 할당 연산자(복사 생성자)에 대한 강제 코드 생성을 지정하는 기능을 추가하세요.
내가 조언자에서 표준 지표(예: iMA)를 사용하는 경우,
시각화 창에 올바르게 표시되도록 드로잉 스타일 을 설정하는 방법은 무엇입니까?
내가 조언자에서 표준 지표(예: iMA)를 사용하는 경우,
시각화 창에 올바르게 표시되도록 드로잉 스타일 을 설정하는 방법은 무엇입니까?
다음과 같이: 사용자 정의 이동 평균 입력 색상
다음과 같이: 사용자 정의 이동 평균 입력 색상
즉, 실제로 자신의 지표를 작성해야 합니다. 표준 지표를 다시 작성하는 것은 선택 사항이 아닙니다.
문제는 정확히 표준 지표의 스타일을 지정하는 방법이었습니다.
다른 방법이 있습니까?
그러나 StringSetLength 함수의 작업은 여러 가지 질문을 제기합니다.
StringSetLength의 도움으로 문자열의 길이를 트리밍할 수만 있고 늘리는 방법은 알 수 없습니다.
의도된 동작입니까?
결과:
#define PRINT(x) Print ( #x, ":" , string (x)) void OnStart (){ string str = "123\x0000\x0000\x0000\x0000456789" ; PRINT(str); PRINT( StringLen (str)); // StringLen(str):13 StringLen поддерживает работу с 0х0000 short value PRINT(StringSetLength_using_StringInit(str, 100 )); // false StringInit не поддерживает работу с 0х0000 short value PRINT(StringSetLength_using_ShortArrayToString(str, 100 )); // false ShortArrayToString не поддерживает работу с 0х0000 short value PRINT(StringSetLength_using_StringInit_with_StringFill(str, 100 )); // false StringFill не поддерживает работу с 0х0000 short value } bool StringSetLength_using_StringInit( string &string_var, int new_length){ bool result = false ; int prev_length = StringLen (string_var); if (new_length == prev_length){ result = true ; return result; } string data = string_var; if (new_length < prev_length){ StringSetLength (data, new_length); } else { string string_tail; StringInit (string_tail, new_length - prev_length, 0x0000 ); data += string_tail; } if ( StringLen (data) == new_length){ string_var = data; result = true ; } return result; } bool StringSetLength_using_ShortArrayToString( string &string_var, int new_length){ bool result = false ; int prev_length = StringLen (string_var); if (new_length == prev_length){ result = true ; return result; } string data = string_var; if (new_length < prev_length){ StringSetLength (data, new_length); } else { short data_array[]; StringToShortArray (data, data_array); ArrayResize (data_array, new_length); ArrayFill (data_array, prev_length, new_length - prev_length, 0x0000 ); data = ShortArrayToString (data_array, 0 , new_length); } if ( StringLen (data) == new_length){ string_var = data; result = true ; } return result; } bool StringSetLength_using_StringInit_with_StringFill( string &string_var, int new_length){ bool result = false ; int prev_length = StringLen (string_var); if (new_length == prev_length){ result = true ; return result; } string data = string_var; if (new_length < prev_length){ StringSetLength (data, new_length); } else { string string_tail; StringInit (string_tail, new_length - prev_length, 0x1111 ); StringFill (string_tail, 0x0000 ); data += string_tail; } if ( StringLen (data) == new_length){ string_var = data; result = true ; } return result; }
최근 버전의 MT에서는 문자열 작업에 대한 패러다임 전환의 일환으로 NULL 종료 문자열 사용을 거부했습니다.
이 아이디어에 대해 자세히 설명해 주시겠습니까?
지식이 풍부한 사람들, 말해! 실제 기호를 기반으로 한 사용자 지정 기호가 있습니다. 이 기호의 차트에서 거래를 가능하게 하는 방법은 무엇입니까? 아니면 MT5에는 그런 기능이 없나요?
답은 자명합니다. 사용자 지정 기호 는 실제 기호에서 일부 변환을 통해 얻습니다. 누군가(EA, 스크립트 또는 수동) 역변환을 수행하고 실제 기호에 대한 주문을 제출해야 합니다.