이 클래스의 모든 개체에서 한 번 열리는 파일에 데이터를 써야 하는 경우 정적 변수 없이는 방법이 없습니다. 그리고이 문제를 해결하는 데 가장 적합하다면 왜 제거합니까? 물론 전역 변수를 선언할 수도 있습니다.
이제 각 개체가 파일을 열면 쓰고 닫습니다. 그러면 각각의 객체에 파일명만 있으면 충분하겠지만.. 하지만 이 경우에도 변수의 값은 언제 어디서나 같기 때문에 정적 변수를 사용하는 것이 좋습니다.
아니면 못받았어요)
한 번 열리는 파일에서 데이터를 쓰고 즉시 닫습니다. 터미널이 중단되면 데이터가 손실되지 않도록 1분에서 1시간에 한 번 기록합니다. 열린 파일을 그렇게 오랫동안 유지하는 것은 의미가 없습니다. 시각
이제 다음과 같이 코드를 작성해 보겠습니다.
// это один файл, его не трогаю, тут только конструктор и 3 метода из интерфейсов, чтобы дать стратегиям тик, чтобы закрыть их и вот чтобы записать все ТС в файл
//____________________________________________________________________void EA:: OnTick ( double &profit[])
{
for ( int i = 0 ; i < StrategyCount; i++) profit[i] = Strategy[i].Strategy(); // запустили зоопарк стратегий и тут нам интересно дать им волю и узнать их профит, если ТС завершилась // она самостоятельно запустит "пустую стратегию", но профит будет возвращать первоначальныйif (CStrategy::GetSaveRequired()) Save(); // вот тут узнаем состояние флага требуется ли запись состояния любой из ТС
}
//____________________________________________________________________//это структура которая умеет открыть и записать файл, пример от fxsaberstruct FILE
{ constint handle;
FILE( conststring FileName, constint Flags ) : handle(:: FileOpen (FileName, Flags)) {}
~FILE( void ) { if ( this .handle != INVALID_HANDLE ) :: FileClose ( this .handle); Print ( __FUNCTION__ );}
};
//____________________________________________________________________// метод для записи в файл состояния всех ТС, но проще записать все ТС один раз в файл, чем искать одну ТС..... в общем считаем, что скорость доступа к диску намного меньше чем работа с памятью// используем структуру FILE - ну это просто удобно, объявили и забыли, она сама закроет файл когда уйдет из области видимостиvoid EA::Save( void )
{ FILE f(DEF_PREFIX_FILE_NAME + IntegerToString (m_magic)+ ".bin" , FILE_WRITE | FILE_BIN );
for ( int i = 0 ; i < StrategyCount; i++)
Strategy[i].SaveSelfStatus(f.handle);
}
// это основной файл (инклудник) в котором работаю, тут ТС
//____________________________________________________________________
здесь опять все кратко и лаконично, но сделаю вывод в лог ошибки если возникнут при записи, сделаю именно здесь, т.к. только тут все модификации
void CStrategy::SaveSelfStatus( constint handle)
{ FileWriteStruct (handle,m_setting);
FileWriteStruct (handle,m_order_info);
}
Статья будет полезна в первую очередь разработчикам, которые теряются на собеседованиях когда слышат вопрос «Назовите основные отличия синглтона от статического класса, и когда следует использовать один, а когда другой?». И безусловно будет полезна для тех разработчиков, которые при слове «паттерн» впадают в уныние или просят прекратить...
추신: 저는 이미 정적 구조로 실험을 시작했습니다... 초기화 문제만 보고 코드 가독성을 위해 flag.saveRequired 옵션을 시도한 다음 flagsave.Required 옵션을 시도했습니다. 그런 다음 이미 = 연산자를 오버로드하는 데 어려움을 겪었습니다. 일반적으로 이 모든 것은 넌센스입니다. 결과적으로 개인 정적 변수를 통해 코드를 만들고 setter와 getter를 추가하면 코드가 훨씬 간단하고 읽기 쉽습니다. 하지만 그들이 말하듯이: 우리는 쉬운 방법을 찾고 있지 않습니다 .... 최선 이해할 수없는 비디오의 저자에게 ...
Volchansky가 여기에서 충분하지 않은 이유는 이제 이상하지 않습니다. 내부자 미리보기 또는 그가 사용하는 모든 것))
3개월 전에 오프사이트에서 win 10home을 다운로드했는데 기본 설정을 할 시간조차 없었습니다. 시작 아이콘 설정이 열리지 않습니다. 네 ***********
다음은 예입니다.
나는 당신의 예를 내 작업에 완전히 적용하려고 시도했지만 다시 같은 레이크 - 기본 클래스에서 새 자식을 만들 때 "레코드 필요" 플래그로 끝내고 싶습니다.
2019.09.14 16:07:26.856 Builder_v1.00 (EURUSD,H1) CStrategy::CStrategy (int) 저장 = 0
2019.09.14 16:07:26.856 Builder_v1.00 (EURUSD,H1) CStrategy::CStrategy(int) 저장 = 0
2019.09.14 16:07:26.856 Builder_v1.00 (EURUSD,H1) 4
2019.09.14 16:07:26.856 Builder_v1.00 (EURUSD,H1) 하나
지금까지 작동한 모든 것:
1. 인터페이스를 선언하지 않음 - 전혀 문제가 되지 않았습니다.
2. 많은 setter와 getter를 생성하지만 정적 변수에서 벗어날 수 없습니다.
다시 시도하고 다음과 같이 코드를 다시 작성했습니다.
결과는 첫 번째 옵션에서와 같이 일대일입니다. 유일한 것은 인터페이스를 확실히 떠났다는 것입니다.
얻는 목표는 무엇입니까?
모든 것이 작동하지만 목표는 지식을 얻는 것입니다))))
내가 한 방법 :
- 모든 계산이 저장되고 차량 설정을 저장하는 기본 클래스가 있습니다. 우리는 자신의 차량에서 작동하는 자손을 상속합니다.
- 열린 파일 의 핸들을 모든 자손에게 전달하여 하나의 파일에 저장하는 것이 편리하다고 생각합니다. 이 경우 save() 메서드는 다시 기본 클래스에 있습니다.
- 이벤트/플래그가 발생했을 때 기록하는 것이 좋습니다. - 자손 중 어느 것이 언제 시작되는지 알 수 없지만 무언가를 찾는 것보다 새 파일에 수십 개의 구조를 작성하는 것이 더 빠릅니다.
- 왜 하나의 클래스와 설정의 배열을 만들지 않습니까? - 가상으로 선언하기 위해 1~2개의 메소드가 필요하며, 각 차량에 추가합니다.
- 문제: 내가 모르는 제다이 OOP 트릭이 있기를 바라는 마음으로 정적 변수에서 벗어나려고 합니다.
추신: const 수정자는 좋은 것입니다. 보낸 시간을 후회하지 않습니다. 유용합니다. 토론한 사람들에게 다시 한 번 감사드립니다!
이 클래스의 모든 개체에서 한 번 열리는 파일에 데이터를 써야 하는 경우 정적 변수 없이는 방법이 없습니다. 그리고이 문제를 해결하는 데 가장 적합하다면 왜 제거합니까? 물론 전역 변수를 선언할 수도 있습니다.
이제 각 개체가 파일을 열면 쓰고 닫습니다. 그러면 각각의 객체에 파일명만 있으면 충분하겠지만.. 하지만 이 경우에도 변수의 값은 언제 어디서나 같기 때문에 정적 변수를 사용하는 것이 좋습니다.
아니면 못받았어요)
이 클래스의 모든 개체에서 한 번 열리는 파일에 데이터를 써야 하는 경우 정적 변수 없이는 방법이 없습니다. 그리고이 문제를 해결하는 데 가장 적합하다면 왜 제거합니까? 물론 전역 변수를 선언할 수도 있습니다.
이제 각 개체가 파일을 열면 쓰고 닫습니다. 그러면 각각의 객체에 파일명만 있으면 충분하겠지만.. 하지만 이 경우에도 변수의 값은 언제 어디서나 같기 때문에 정적 변수를 사용하는 것이 좋습니다.
아니면 못받았어요)
한 번 열리는 파일에서 데이터를 쓰고 즉시 닫습니다. 터미널이 중단되면 데이터가 손실되지 않도록 1분에서 1시간에 한 번 기록합니다. 열린 파일을 그렇게 오랫동안 유지하는 것은 의미가 없습니다. 시각
이제 다음과 같이 코드를 작성해 보겠습니다.
아니면 내가 이해하지 못했다
제가 이해한게 하나도 없는거 같은데 저번달에 '대각선으로'라는 글을 읽고 이번달에 다시 돌려봤는데 편법성 확인을 위해 테스트를 해봐야겠네요
Habr: 싱글톤(싱글톤) 또는 정적 클래스?
- 문제: 내가 모르는 제다이 OOP 트릭이 있기를 바라는 마음으로 정적 변수에서 벗어나려고 합니다.
이것이 왜 문제입니까? 필요한 경우 정적 변수 에서 멀리 이동할 필요가 없습니다.
나는 여전히 녹음의 필요성 플래그가 무엇에 의존하는지 이해하지 못합니다.
내 예에서는 변경 사항이 있으면 설정됩니다.
그리고 어떻게 필요합니까?
이것이 왜 문제입니까? 필요한 경우 정적 변수 에서 멀리 이동할 필요가 없습니다.
그러면 문제가 해결됩니다! - 처음에 모든 것을 했다
추신: 저는 이미 정적 구조로 실험을 시작했습니다... 초기화 문제만 보고 코드 가독성을 위해 flag.saveRequired 옵션을 시도한 다음 flagsave.Required 옵션을 시도했습니다. 그런 다음 이미 = 연산자를 오버로드하는 데 어려움을 겪었습니다. 일반적으로 이 모든 것은 넌센스입니다. 결과적으로 개인 정적 변수를 통해 코드를 만들고 setter와 getter를 추가하면 코드가 훨씬 간단하고 읽기 쉽습니다. 하지만 그들이 말하듯이: 우리는 쉬운 방법을 찾고 있지 않습니다 .... 최선 이해할 수없는 비디오의 저자에게 ...
Volchansky가 여기에서 충분하지 않은 이유는 이제 이상하지 않습니다. 내부자 미리보기 또는 그가 사용하는 모든 것))
3개월 전에 오프사이트에서 win 10home을 다운로드했는데 기본 설정을 할 시간조차 없었습니다. 시작 아이콘 설정이 열리지 않습니다. 네 ***********
바쁘고 포럼에 많은 시간이 걸립니다. Insider Preview 를 설치하지 않는 것이 좋습니다. 이제 Winda는 일주일에 한 번 새 빌드를 설치합니다. MS 웹사이트에서 안정적인 빌드를 다운로드하는 것이 좋습니다. 또 한곳에서 놀고 있는 나의 유치한 호기심 :)