Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518

Преобразование исходного (первичного) типа составного типа

29.05.2019, 12:30. Показов 722. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет!

Как можно изготовить следующую штуку?
Это понадобилось для покрытия тестами шаблонно-функций.

Что бы сразу было понятно о чем речь, приведу небольшую справку:

Большинство типов языка можно разделить на две категории:
- Исходные (первичные)
- Составные (первичные)
- Составные (производные от первичных)

Например, фундаментальный тип char - исходный (первичный).
В то время, как const char* - производный от исходного char

Другой пример: тип функции int(int) - составной (первичный)
В то время, как int(*)(int) - производный от составного-первичного int(int)

Задача 1: необходимо изготовить мета-функцию,
которая будет принимать на входе любой тип данных и разлагать его на атомы.
результат работы функции - первичный тип.

Пример:
C++
1
2
3
4
5
6
7
8
9
        typedef test::decay<int>::type A;                 // int
        typedef test::decay<int&>::type B;                // int
        typedef test::decay<int&&>::type C;               // int
        typedef test::decay<const int&>::type D;          // int
        typedef test::decay<int[2]>::type E;              // int
        typedef test::decay<int(int)>::type F;            // int(int)
        typedef test::decay<int(&)(int)>::type F;         // int(int)
        typedef test::decay<int(*)(int)>::type F;         // int(int)
        typedef test::decay<int(user::*)(int)>::type F;   // int(int)
Примечание:
Типы, которые произошли от составных-первичных,
например "указатель-на-функцию", разлагаются до составных-первичных: "функция"

"Указатели-на функцию-член" разлагаются до типа "функция".
При этом теряется информация о классе.

Задача 2: необходимо изготовить мета-функцию,
которая будет принимать на входе два параметра: любой тип данных, и исходный (первичный)
и заменять в первом параметре исходный-первичный на второй параметр.

Пример:
C++
1
2
3
4
5
6
7
8
9
10
        typedef test::change_source<int        , char>::type A;                // char
        typedef test::change_source<int&       , char>::type B;                // char&
        typedef test::change_source<int&&      , char>::type C;                // char&&
        typedef test::change_source<const int& , char>::type D;                // const char&
        typedef test::change_source<int[2]     , char>::type E;                // char[2]
        typedef test::change_source<int(int)   , char>::type F;                // char(char)
        typedef test::change_source<int(&)(int), char>::type F;                // char(&)(char)
        typedef test::change_source<int(*)(int), char>::type F;                // char(*)(char)
        typedef test::change_source<int(user::*)(int), char(float)>::type F;   // char(user::*)(float)
        typedef test::change_source<int(*)(int), bool(char, char)>::type F;    // bool(user::*)(char, char)
Примечание:
Второй параметр функции сначала разлагается до первичного типа.
И только затем выполняется преобразования первого параметра

Примечание:
Для типов "функция" (и производных от неё) если второй параметр - исходный первичный,
тогда заменяются тип возвращаемого значения и все аргументы
Если второй параметр разлагается до "функции",
тогда заменяются типы возвращаемого значения, и списки аргументов
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.05.2019, 12:30
Ответы с готовыми решениями:

Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур
Сабж. Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур или... пободного рода простых для восприятия...

Ошибка что то типа не объявленный идентификатор,и типа невозможно преобразовать CStringW в там что..то
Даже не знаю как сказать... короче есть база а Access,которую я подключил к проекту MFC,и в этой базе всего одно поле с текстовым типом...

Преобразование строкового типа в переменную типа float
Как в программе С++ Builder6 преобразовать строковый тип числа взятого из компонента StringGrid1-&gt;Cells в переменную типа float, чтобы...

1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.05.2019, 14:11
Цитата Сообщение от eva2326 Посмотреть сообщение
Задача 1: необходимо изготовить мета-функцию,
которая будет принимать на входе любой тип данных и разлагать его на атомы.
результат работы функции - первичный тип.
Мне кажется, здесь самое простое - специализировать шаблон, что-то типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
namespace test
{
template <typename... TT> struct decay;
template <typename TRes, typename... TT> struct decay<TRes(TT...)> { using type = TRes(TT...); };
template <typename TRes, typename... TT> struct decay<TRes (*) (TT...)> { using type = TRes(TT...); };
template <typename TRes, typename U, typename... TT> struct decay<TRes (U:: *)(TT...)> { using type = TRes(TT...); };
 
template <typename T> struct decay<T> { using type = std::decay_t<T>;};
template <typename T> struct decay<T*> { using type = std::decay_t<T>; };
template <typename T> struct decay<T[]> { using type = std::decay_t<T>; };
template <typename T, size_t N> struct decay<T[N]> { using type = std::decay_t<T>; };
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2019, 14:11
Помогаю со студенческими работами здесь

Преобразование типа StringGrid в int
Уважаемые, помогите пожалуйста, не могу избавиться от ошибки. Искал варианты решений на форуме, не нашел. Суть в том что нужно к целому...

Преобразование типа указателя на С++ Builder XE
Всем здравствуйте, помогите пожалуйста со следующей проблемой! Установил С++Builder XE и загрузил в него полностью рабочий проект со...

Преобразование объектов целого типа
Здрасте. Билдер постоянно ругается на сравнение знаковых и не знаковых объектов. То есть такой код: for(uint8_t vi1 = 0; vi1 &lt;...

Преобразование txt-файла в строку типа AnsiString
Подскажите пожалуйста, как преобразовать большой текст в формате *.txt в строку типа Ansistring?

Как сделать что бы в listbox было типа заголовков, а в ValueListEditor содержание(что то типа бд)
Как сделать что бы в listbox было типа заголовков, а в ValueListEditor содержание?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru