У меня есть назначение, которое просит написать функцию для любого типа данных. Предполагается, что функция должна печатать байты структуры и идентифицировать общее количество байт, которые использует структура данных, и дифференцировать байты, используемые для членов и используемых байтов для заполнения.Функция C++, которая принимает любой тип данных без использования шаблонов?
Моей непосредственной реакцией, наряду с большинством реакций классов, было использование шаблонов. Это позволяет вам написать функцию один раз и собрать тип времени выполнения объектов, переданных в функцию. Используя memset и typeid, вы можете легко выполнить то, что было задано. Однако наш проф. просто увидели наше обсуждение шаблонов и проклятых шаблонов в ад.
Увидев это, меня бросили в петлю, и я ищу небольшое руководство, как лучший способ обойти это. Некоторые вещи, которые я посмотрел на:
- недействительных указатели с явной отливкой (это похоже было бы запутаться)
- базового класса только с виртуальными функциями, из которых структуры всех данных наследуют, кажется немного странным делать.
- базовый класс с «дружбой» для каждой из наших структур данных.
- переписывание функции для каждой структуры данных в нашем наборе проблем (что я считаю наихудшим возможным решением).
Я надеялся, что я упустил из виду общий инструмент C++, есть ли у кого-нибудь идеи?
Если ваш ** C++ ** инструктор проклят шаблонами в ад, я искренне надеюсь, что еще не поздно отказаться от занятий для другого преподавателя. Конечно, что-то должно быть проклято в ад, но это не шаблоны. – WhozCraig
Это невозможно даже с шаблонами. Компилятор (за исключением некоторого нестандартного расширения) не предоставляет достаточной информации времени выполнения, чтобы определить точные детали макета типа, не зная об этом. –
Что именно вы задали? Рассеять необработанную память структуры на член и байты заполнения? –