Всем привет есть структура struct A { char a[0xFFFFFFFF]; char b[0xFFFFFFFF]; char c[0xFFFFFFFF]; .... } Размер структуры теоретически должен быть слишком большой (порядка 12-16 Гб) Подскажите, как оформить код так, чтобы например при действии MyStruct->a[0] = 1; Выполнялись следующие действия 1. Открывался файл 2. Находился нужный элемент 3. Вносились изменения 4. Происходила запись в файл 5. Файл закрывался в принципе все по отдельности сделать могу, открыть файл, смэпить его часть, переписать и сохранить. Думал даже сделать как класс и методом оформить нужные действия... Но тогда код не сильно читабельный получается. Можно ли как-то переопределить для моего класса "->" и "." Заранее спасибо PS: структура предназначена для большой нейронной сети. И уйти от больших массивов, увы, не получится... Оптимизировал все по максимуму.
Архитектура жесть. Не советую мешать ООП и процедурный подходы. Вы думаете если засунуть кучу действий в оператор [], то это добавит читабельности?
Ra!N Большое количество нейронов по условию. Если реализовывать классические схемы (как в учебниках), расход памяти упирается в сотни Гигабайт. t00x Первый раз все-равно нужно выполнить CreateFile + CreateFileMapping А дальше танцы MapViewOfFile / UnmapViewOfFile но это все детали. Вопрос о другом. Booster Я вот и думаю на чистом ООП, с классами и методами. На чистом процедурном код становится слишком нечитабельным. Так все же, можно ли как-то переопределить "->" для моего класса? Ну или свой оператор внести? Или все-таки только как метод оформлять?
Если необходимо следовать OOП принципам, то нужно сделать некую сущность и обращаться к ней с помощью методов, а не к полям. Переопределение оператора "->" делается для других целей.
RTY_IOP я бы на вашем месте сначала глубоко продумал всю архитектуру программы, а потом начал ее реализовывать. Потом сэкономите кучу времени и сил. В хорошо продуманной программе, независмо от ее сложности, 12-16гб структур не должно быть! Так писать нельзя: уверен, есть лучшее решение.
Привет. По сути требуется STL-like sequence container подобный std::vector Код (Text): struct MyClass { typedef char value_type; MyClass() { openFile(); } ~MyClass() { closeFile(); } value_type const operator[](size_t n) const { return getFileEelement(n); } value_type & operator[](size_t n) { return getFileEelement(n); } }; struct A { MyClass a; MyClass b; MyClass c; //.... }; В чём проблемы, если "все по отдельности сделать могу, открыть файл, смэпить его часть"? "переписать и сохранить" - это не надо, изменения в мапе прозрачно идут в файл. У тебя const версию getFileEelement реализовать просто, но обычная не дасат желаемого эффекта в Код (Text): f() { A MyStruct; MyStruct->a[0] = 1; } поскольку буде возвращать ссылку на локальный объект. value_type придётся делать не char, а прокти обектом, который будет записывать в деструкторе. Продолжать?