|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
|
Один и тот же код на С++ и С#, Шаблоны, отображение содержимого шаблонного класса01.06.2012, 09:58. Показов 5131. Ответов 20
Метки нет (Все метки)
написан на С++ шаблонный класс "List" созданный для создания списковой структуры внутри двоичного файла ([элемент][номер байта с которого следует читать следующий элемент(указатель)])
предусматривается работа с любыми данными для которых перегружены операции < > = cout Для класса "List" определены операции ввода нового, удаления по номеру, сортировка, балансировка(Так как при удалении физически элемент не удаляется из двоичного файла, а переписываются указатели, спустя какое то время накапливаются элементы на которые нет ссылок но занимают память, функция балансировки переписывает файл уже без удаленных элементов) следует переделать эту работу на С#, отображая на форме все данные о классе. собственно мои вопросы: 1) отличие шаблонов в C++ и C# 2) если в С++ можно было перегрузить cout для корректного отображение элементов любого типа то что следует сделать в С# c формами? Была идея отображать информацию в ListView, программно инициализируя новые колонки, но для этого надо знать количество полей класса и их имена. Есть ли в С# средства для подсчета количества полей класса? Приветствуются любые советы ^^
0
|
|
| 01.06.2012, 09:58 | |
|
Ответы с готовыми решениями:
20
Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра? Почему перегруженные шаблоны функций должны возвращать один и тот же тип? Partial шаблонного класса (Весь основной код класса вынести в другой файл) |
|
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
|
||||||||||||||
| 01.06.2012, 10:13 | ||||||||||||||
1
|
||||||||||||||
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
||||||
| 01.06.2012, 11:02 [ТС] | ||||||
|
Только начал писать и сразу же возникли ошибки
0
|
||||||
|
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
|
||||||
| 01.06.2012, 11:14 | ||||||
|
потомучто для вызова бозового конструктора нужно так писать:
1
|
||||||
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
||||||
| 01.06.2012, 11:44 [ТС] | ||||||
|
О спасибо большое
В другой программе на С# писал точное имя и все работало, странно >< Добавлено через 22 минуты Так, вот еще, У меня есть класс наследник от FileStream Я считать из потока информацию. Для этого мне нужно создать объект класса BinaryReader
Если в моем классе нет как такового поля "потока", я просто создаю поток при создание элемента класса наследника. Или все таки завести поле? В С++ у меня был довольно красивый код без этого поля, хотелось бы как нибудь избежать создание поля типа FileStream если я и так наследую этот класс...
0
|
||||||
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
|
| 01.06.2012, 11:55 [ТС] | |
|
О, ошибок не выдал
но так чисто по теории... через this передастся весь файл, да еще небось вместе с формой (её полями и тп) почему же конструктор сработает корректно?
0
|
|
|
|
|
| 01.06.2012, 12:04 | |
|
this - это ссылка на объект. В данном случае сслыка на объект типа ListBin.
Но так как ListBin - наследник класса FileStream, то this будет являтьс ссылкой и на объект типа FileStream одновременно (а также ссылкой на каждого из родителей FileStream).
1
|
|
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
|
| 01.06.2012, 12:48 [ТС] | |
|
Далее...
В С++ была возможность в шаблонном классе сделать sizeof(T) Как получить размер элемента класса в С#?
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
|
| 01.06.2012, 13:58 [ТС] | |
|
Принцип такой. Есть двоичный файл. В него пишется [элемент][адрес следующего элемента][элемент][адрес следующего элемента][элемент][адрес следующего элемента]
т.е чтобы считать элемент надо знать размер. Программа работает с не динамическими типами, т.е int, char и тп. а так же с классами содержащими конкретное количество полей такого типа. т.е с классами размер элементов которых всегда одинаков Добавлено через 34 минуты Обратите внимание на темку пожалста ><
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
||||||||||||||||
| 01.06.2012, 16:28 [ТС] | ||||||||||||||||
В смысле смог засунуть это в переменную... ........................................ ........................................ ...... имеется класс фиксированного размера. Есть класс шаблон для которого пишется операция добавления элемента в двоичный файл.
Есть ли у С# аналог reinterpret_cast<> ??
0
|
||||||||||||||||
|
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
|
|||||||||||
| 01.06.2012, 19:57 | |||||||||||
|
запись структуры:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
|
| 01.06.2012, 20:08 [ТС] | |
|
Konctantin, Можно хоть немного комментариев? Я не знаком и с половиной того что ты использовал ><
0
|
|
|
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
|
||||||||||||
| 01.06.2012, 20:59 | ||||||||||||
PS Тут есть один нюанс, изза которого потом можете поиметь жестокий **** с дебаггером при отлове ошибок. Если мы объявим такую структуру
попробуйте сами догадаться
в структуре есть ссылочная переменная - lengths, т.к. Tuple<int, int, int> класс, а значение класса лежит не в стеке а в куче, а в стеке только ссылка на это значение, и в рантайме не возможно будет вычислить размер класса, т.к. рантайм не знает что там хранится, он только про ссылку знает. Вот поэтому при попытке выполнить ф-цию WriteStruct передав ей экземпляр структуры foo мы получим эксепшн
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
||||||
| 01.06.2012, 21:07 [ТС] | ||||||
|
У получился вот такой вот код, он поооочти правильный... не хватает одного момента
Очень буду рад если кто нибудь не полениться и посмотрит мой код Да кстати е**я с FuckingC - где лежит непонятно что вызвано неумением работать с классом Type, вот
0
|
||||||
|
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
|
|
| 01.06.2012, 21:13 | |
|
Для конвертации чего-либо в массив бай есть класс BitConverter
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 65
|
|
| 01.06.2012, 21:44 [ТС] | |
|
Alex Sabaka, А сам код можешь оценить? Начиная с 8ой строчки, все логично там? ><
Добавлено через 3 минуты И да, в BitConverter все заточено под стандартные классы >< Добавлено через 25 минут Convert.ChangeType(item, a); я не совсем понял, Тype a - типо того что мы преобразуем, или к чему?
0
|
|
| 01.06.2012, 21:44 | |
|
Помогаю со студенческими работами здесь
20
Вызов метода у шаблонного поля, шаблонного класса Дубликат класса. Widget1 и widget2 указывают на один и тот же объект Один и тот же код, но работает по разному Один и тот же код выполняется по-разному Один и тот же код по разному работает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|