할당할 때 switch를 제거하고 오버로딩을 활용할 수도 있습니다.
void operator =( double par){ data = int ( double (par)* 100000 ); type = PRICE; } void operator =( datetime par){ data= int ( uint (par)); type=TIME; } void operator =( int par){ data = int (par); type = NUMBER; }
그런 다음 반환된 값이 산술 연산에 사용될 경우(집중할 사항) 다음과 같습니다.
string operator +( string par){ return to_string()+par; } double operator +( double par){ return to_price()+par; } double operator +( int par){ return to_number()+par; }
Print (p1+ 1 ); Print (p1+ 1.0 ); Print (p1+ "1" );
---
나 자신을 위한 것이라면 참조에 의한 매개변수를 통해 반환되는 오버로드된 함수를 만들 것입니다.
void r( double & v){ v=to_price(); } void r( int & v){ v=to_number(); } void r( string & v){ v=to_string(); }
할당할 때 switch를 제거하고 오버로딩을 활용할 수도 있습니다.
그런 다음 반환된 값이 산술 연산에 사용될 경우(집중할 사항) 다음과 같습니다.
명시적 과부하 및 산술 작업으로 모든 것이 명확해집니다. 예, 오버로드된 = 이 경우에는 분명히 더 성공적이었습니다. 올바르게 알아차렸을 뿐만 아니라 급하게 질문에 대한 예제를 작성했고 실제로 그것에 대해 생각하지 않았습니다(숫자는 int뿐만 아니라 char, uchar, short, ushort, uint, bool 및 color이므로 모든 것이 모호하지 않습니다))))))))
내가 참조에 의한 매개변수를 통한 반환으로 함수를 오버로드하게 만들었더라면.
여기서 문제는 오버로드된 메서드 의 반환 유형이 개체의 내용에 따라 다르다는 것입니다.
예를 들어, 다중 유형 배열이 있습니다(여러 책이기 때문에 예제를 제공하지 않겠습니다). 그리고 물론 모든 배열에는 해당 인덱스가 있는 변수 값을 반환하는 인덱싱 작업 []이 있어야 합니다.
그러나 변수에는 다른 유형이 있습니다. datetime이 있을 수도 있고, 문자열일 수도 있고, 이 인덱스 아래에 일부 사용자 정의 유형일 수도 있습니다. 그리고 이상적으로는 []를 인덱싱할 때 반환된 값의 유형이 명시적으로 매개변수화할 필요 없이 해당 유형을 자동으로 생성하기를 바랍니다. 이전에는 var[(char)1], var[(short)1], var[(uint)1] 등 이 "문제"를 해결했습니다. 그러나 이 목발은 좋지 않습니다.
void OnStart() { CParameter<double> p1 = Ask; CParameter<double> p2 = Bid; CParameter<datetime> p3 = TimeCurrent(); CParameter<datetime> p4 = TimeLocal(); // Перегруженный в CParameter оператор ~ возвращает преобразованное в строку значение известного объекту типа printf( "p1=%s, p2=%s, p3=%s, p4=%s", ~p1, ~p2, ~p3, ~p4 ); // А можно ли исхитриться и сделать вот так (допустим это будет перегруженный тем или иным образом оператор !, возвращающий // значение нужного типа в зависимости от type. // double ask = !p1, bid = !p2; datetime current = !p3, local = !p4; } template <typename T> class CParameter { public: void operator =( const T Value ) { this.data = Value; } string operator~( void) const { return((string)this.data); } T operator !( void ) const { return(this.data); } private: T data; };
이 경우 p1에 p4의 값을 할당하지 않습니다(유형 변경 포함). 그러나 이것은 원칙적으로 가능해야 합니다. 또한 개체는 동일한 유형이어야 합니다.
글쎄, 또는 배열의 경우 - 하나의 기본을 가진 다른 유형의 객체이지만 배열 객체 자체에는 메서드가 있으며 반환 유형은 해당 인덱스가 있는 객체 유형에 따라 다릅니다.이 경우 p1에 p4의 값을 할당하지 않습니다(유형 변경 포함). 그러나 이것은 원칙적으로 가능해야 합니다. 또한 개체는 동일한 유형이어야 합니다.
글쎄, 또는 배열의 경우 - 하나의 기본을 가진 다른 유형의 객체이지만 배열 객체 자체에는 메서드가 있으며 반환 유형은 해당 인덱스가 있는 객체 유형에 따라 다릅니다.![Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура входных параметров индикатора Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура входных параметров индикатора](https://c.mql5.com/36/22/dokumentaciya-po-mql5-konstanti__5.png)
- www.mql5.com
예, 90%의 경우 4로 충분할 때 32바이트를 전송합니다. 일반적으로 이것은 분기의 문제가 아닙니다. 저는 순서에 관심이 있습니다. 설명에서 누군가가 다소 우아한 솔루션을 찾았을 수도 있습니다. 상황
추신 게다가, 질문은 다른 유형의 데이터를 하나의 객체/구조에 저장하는 것에 관한 것이 아닙니다.
메서드는 반환할 형식을 결정할 수 없습니다.
즉, 당신은 내가 쓴 것을 반복했습니다. 문제는 할 수 있는지 없는지가 아니라 왜 할 수 없는지와 어떻게 우아하게 해결할 수 있는지였습니다.
즉, 당신은 내가 쓴 것을 반복했습니다. 문제는 할 수 있는지 없는지가 아니라 왜 할 수 없는지와 어떻게 우아하게 해결할 수 있는지였습니다.
유형 제어가 손실됩니다. 이러한 질문에 대한 답변은 C++ 리소스를 참조하세요. 꽤 자주 물어보는 것 같아요.
친애하는 프로그래머 여러분, 저는 오랫동안 이 질문에 대해 머리를 긁적였습니다. 어떻게든 함수의 반환 값을 암시적으로 입력하고 만들 수 있습니까? 메소드 호출이 외부적으로 동일할 때 클래스 메소드 가 다른 유형의 값을 리턴하는 경우.
이것은 수업 자체이며 질문이 명확하면 볼 수 없습니다.