Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Шаблонная функция Всем привет! Как объяснить компилятору, чтобы он при инстанцировании шаблона не брал часть кода? #include <iostream> #include <string> #include <limits> template <class T> T convert(const double value); https://www.cyberforum.ru/ cpp-beginners/ thread3125638.html Сумма чисел кратных 3 или 5. Не работает программа. C++
Задача заключается в поиске суммы чисел (sum) кратных 3 или 5 до num. Если num == 0, по заданию просят вернуть 0; Задача: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Finish the solution so that it returns the sum of all the multiples of 3 or 5 below the number passed in. Additionally, if the number is...
C++ Создания программы из нескольких файлов При попытке запустить код, выдаётся ошибка LNK2005 и LNK1169. Не очень понимаю как связать функции к исполняемому файлу. Главный файл: #include <iostream> #include <locale> #include <string> #include <fstream> #include "List.cpp" https://www.cyberforum.ru/ cpp-beginners/ thread3125612.html C++ Компиляция кода C++ с помощью C++ Добрый день, пишу IDE-шку на C++ и хотелось бы добавить возможность компиляции. Поисковик меня не понимает и выдаёт только то, как компилировать код в готовых IDE. Есть библиотеки или инструкции о том, как компилировать код с помощью C++? https://www.cyberforum.ru/ cpp-beginners/ thread3125536.html
C++ Посоветуйте что почитать по проектированию (если я не ошибаюсь)
Изучаю С++, написал уже несколько прожек, но каждая из них занимает всего один файл. Какие книги или статьи почитать, чтобы понять, по каким принципам, по какой логике программисты разбивают код на разные файлы? Что выносят в заголовочные файлы? Как это всё собирать в итоге? Не могу сообразить, с какого конца браться и что начинать гуглить. Если есть на примете что-то понятное для нубасов -...
C++ filesystem::last_write_time https://www.cyberforum.ru/ cpp-beginners/ thread3125505.html
Разбираю примеры из книги "Решение задач на современном C++" Мариус Бансила Там в 36 задаче есть функция, которая сравнивает текущее время и время изменения файла с учётом заданного интервала: namespace fs = std::filesystem; namespace ch = std::chrono; template <typename Duration> bool is_older_than(fs::path const & path, Duration const duration)
C++ Запись и выгрузка из файла. Ошибка "Необработанное исключение по адресу 0x00007FFD54567FBC (ucrtbased.dll)" У меня есть две функции одна выполняет выгрузку из файла,другая загрузку,но при запуске приложения у меня выходит ошибка,я не особо понимаю где именно я ошибаюсь "Необработанное исключение по адресу 0x00007FFD54567FBC (ucrtbased.dll) в SongList.exe: Недопустимый параметр был передан функции, для которой недопустимые параметры вызывают неустранимую ошибку." int loadSong(Song*& songs) { FILE*... https://www.cyberforum.ru/ cpp-beginners/ thread3125486.html Не запускается исполняемый файл из VS Code C++
Работаю в VScode, компилирую и запускаю код с помощью расширения Code Runner, но при запуске выдает ошибку. Вот что находится в launch.json { "configurations": , "stopAtEntry": false, "cwd": "${fileDirname}", "environment": , "externalConsole": false,
C++ Функция uint64_t Decrypt(uint64_t data) Доброй ночи! В чём мог ошибиться? вроде тривиально, но чувствую не верно реализовал функцию uint64_t Decrypt(uint64_t data) b=4ee901e5c2d8ca3d, тогда (b1, b0) = (4ee901e5, c2d8ca3d), G(b1, b0) = (c2d8ca3d, 239a4577), Результатом расшифрования является открытый текст a = GG…G(b1, b0) = fedcba9876543210. #include <iostream> #include <fstream> https://www.cyberforum.ru/ cpp-beginners/ thread3125456.html C++ Некорректное преобразование из типа char в uint64_t Добрый вечер! Вопрос, почему после преобразования из типа char в uint64_t, не могу использовать convertedData (тот конвертированный бинарный текст считанный из бинарного файла). Думаю, что не верно считал 1 байт, пока не могу понять в чём ошибка или же сразу считыать бинарные данные в массив char #include <cstdint> #include <iostream> #include <iomanip> #include <set> #include <string>... https://www.cyberforum.ru/ cpp-beginners/ thread3125436.html
Как описать функцию вне класса или структуры если у функции и класса отдельные свои шаблоны? C++
Такой вариант #define en endl #define Typel long #define ret return template<class Types,unsigned char I> struct TupleFor__1{ template<class P,unsigned char E,class F,class Tipes> static P run_t(Tipes&tpl,F f,unsigned char i,Typel*ind,char*point){
C++ Есть ли смысл использовать кодировку UTF-8 для консольных приложений на C++? Добрый день. К такому вопросу пришёл по нескольким причинам. Сразу скажу, этот вопрос не о том, как отображать текст правильно. Ранее пытаясь программировать на другом языке (на Go), пробле
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.08.2023, 19:04 0

Инстанцирование и специализация шаблона - C++ - Ответ 17014606

24.08.2023, 19:04. Показов 2916. Ответов 40
Метки (Все метки)

Ответ

https://www.open-std.org/JTC1/... /n3797.pdf
4 An instantiated template specialization can be either implicitly instantiated (14.7.1) for a given argument
list or be explicitly instantiated (14.7.2). A specialization is a class, function, or class member that is either
instantiated or explicitly specialized (14.7.3).
5 For a given template and a given set of template-arguments,
— an explicit instantiation definition shall appear at most once in a program,
— an explicit specialization shall be defined at most once in a program (according to 3.2), and
— both an explicit instantiation and a declaration of an explicit specialization shall not appear in a
program unless the explicit instantiation follows a declaration of the explicit specialization.
An implementation is not required to diagnose a violation of this rule.
4. Экземпляр специализации шаблона может быть либо неявно создан (14.7.1) для заданного аргумента.
список или быть явно инстанцированным (14.7.2). Специализация — это класс, функция или член класса, который либо
экземпляры или явно специализированные (14.7.3).
5 Для данного шаблона и данного набора аргументов шаблона,
- явное определение экземпляра должно появляться в программе не более одного раза,
— явная специализация должна быть определена в программе не более одного раза (согласно 3.2), и
- как явное инстанцирование, так и объявление явной специализации не должны появляться в
программы, если только явное создание экземпляра не следует за объявлением явной специализации.
Реализация не требуется для диагностики нарушения этого правила.
выделю:
- как явное инстанцирование, так и объявление явной специализации не должны появляться в
программы, если только явное создание экземпляра не следует за объявлением явной специализации.
Реализация не требуется для диагностики нарушения этого правила.

То есть, стандарт выделяет случай когда
явное создание экземпляра следует за объявлением явной специализации
Кроме того. Стандарт трактует явную специализацию как объявление. Инстанцирование может произойти позже - при вызове в коде.
4. Экземпляр специализации шаблона может быть либо неявно создан (14.7.1) для заданного аргумента.
список или быть явно инстанцированным (14.7.2).
А вот явное инстанцирование (как и любое другое) он трактует как определение и создание экземпляра. Для функции это код в секции кода объектного файла.
Впрочем, об этом своими словами я уже писал. Это моя последняя попытка что-то объяснить.

Добавлено через 19 минут
в параграфе § 14.7.2 на который ссылается первая цитата
A definition of a class template, a member class of a class template, or a member class
template of a class or class template shall precede an explicit instantiation of that entity unless the explicit
instantiation is preceded by an explicit specialization of the entity with the same template arguments.
та же оговорка о том что явному инстанцированию может предшествовать явная специализация.
И кстати. Стандарт разделяет определение и декларацию явного инстанцирования. И декларацией считается выражение предваряемое ключевым словом extern. То есть, это вещи похожие и очень близки но разные. Разные.

Добавлено через 3 минуты
вот тут об этом (см. в самом низу цитаты:
14.7.2 Explicit instantiation [temp.explicit]
1 A class, function, variable, or member template specialization can be explicitly instantiated from its template.
A member function, member class or static data member of a class template can be explicitly instantiated
from the member definition associated with its class template. An explicit instantiation of a function template
or member function of a class template shall not use the inline or constexpr specifiers.
2 The syntax for explicit instantiation is:
explicit-instantiation:
externopt template declaration
There are two forms of explicit instantiation: an explicit instantiation definition and an explicit instantiation declaration. An explicit instantiation declaration begins with the extern keyword.


Вернуться к обсуждению:
Инстанцирование и специализация шаблона C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2023, 19:04
Готовые ответы и решения:

Инстанцирование шаблона
Есть шаблонная очередь с использованием vector Как инстанцировать для своего класса,...

Инстанцирование шаблона
Существует шаблон следующего вида: template&lt;class T, int size&gt; void foo(T (&amp;array)) { cout &lt;&lt;...

Инстанцирование шаблона во время выполнения
Добрый вечер! Компилятор требует константное выражение передаваемое в шаблон, как это можно...

Инстанцирование шаблона для различных типов
Помогите пожалуйста с программой... Нужно создать шаблон класса, для работы со структурой...

40
24.08.2023, 19:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2023, 19:04
Помогаю со студенческими работами здесь

специализация шаблона
Добрый день! Хотелось бы сделать шаблонную функцию, у которой будет различная реализация в...

Специализация шаблона
Всем доброго вечера! Возникает непонятная ошибка при создании специализации родового класса cl. В...

специализация шаблона
начал разбираться с шаблонами. если есть структура, и одна функция именно с int должна работать по...

Специализация шаблона
Привет, у меня есть вот такой шаблон дерева: template &lt;typename T = int&gt; class Tree{ ...

Специализация шаблона
Пытаюсь специализировать шаблон для типа float, но не получается. В чем проблема? Компилятор:...

Специализация шаблона
Здравствуйте! Задача: Создайте шаблонную функцию maxn(), которая принимает в качестве...

Специализация операции шаблона
Доброго времени суток. Имеется шаблон: template&lt;class Type&gt;class Figures { /*...*/...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru