Описание тега explicit-instantiation

Explicit instantiation lets you create an instantiation of a C++ templated class or function without actually using it in your code.
1 ответ

С ++: что такое явная реализация

Я читаю книгу C++ primer 5th edition, и я получил это: Тот факт, что экземпляры создаются при использовании шаблона (§ 16.1.1, стр. 656), означает, что один и тот же экземпляр может появляться в нескольких объектных файлах. Когда два или более отдел…
18 май '16 в 17:27
0 ответов

Объявления явного создания экземпляра шаблона C++: лучшие практики

Мой вопрос заключается в том, как мы должны правильно использовать объявления явных экземпляров шаблона? Предположим, у нас есть некоторый шаблонный класс template<class T> Foo, Вот мой разум, как бороться с этой функцией: Мы помещаем шаблон о…
1 ответ

Когда нам нужно явно создать экземпляр функции-шаблона?

Допустим, у нас есть шаблонная функция: template <class T> T max(T a, T b) { return a > b ? a : b; } Поскольку компилятор не выполняет никакого неявного преобразования типов во время вывода аргументов шаблона, мы можем вызвать max(2, 5.5) э…
26 сен '17 в 07:40
3 ответа

Считается ли динамическое создание шаблона класса явным или неявным?

Если у меня есть шаблон класса, и я использую умный указатель на динамически размещенный экземпляр специализированного экземпляра, это заставляет компилятор определять весь шаблон класса или он также будет ждать вызова функции-члена из указателя до …
06 ноя '13 в 19:36
3 ответа

Запретить все экземпляры класса шаблона, включая поддерживаемые типы

Если у меня есть шаблон класса MyClass<T> и если я явно для int а также float (в cpp файл) тогда я могу использовать extern template class MyClass<int> а также extern template class MyClass<float> чтобы не допустить, чтобы любой мо…
26 окт '14 в 13:02
1 ответ

Внешний шаблонный класс vector<unique_ptr <... >> альтернатива

Это началось с вопроса: "Почему невозможно явно создать экземпляр std::vector из std::unique_ptr?" как в: template class std::vector&lt;std::unique_ptr&lt;int&gt;&gt;; хотя следующие явные экземпляры и переменные хороши: template class std::vector&l…
1 ответ

Тип сгруппированный Явное создание шаблонов

Если у меня есть шаблон класса с перегруженными функциями-членами шаблона (с использованием SFINAE), например: template &lt;typename T&gt; struct Foo{ Foo(T elem); template &lt;typename U = T&gt; auto get() -&gt; std::enable_if_t&lt;std::is_same_v&l…
20 янв '19 в 07:39
0 ответов

Шаблоны с фиктивной функцией C++

У меня следующая дилемма: someotherlib.h: struct Other { //... template &lt; typename T &gt; void foo(const T&amp; t){ //.. something } }; mylib.cpp: #include &lt;someotherlib.h&gt; int needsFoo() { //... MyType myObj = //.. Other o = //.. o.foo( my…
1 ответ

Шаблон функции-члена шаблона класса не может найти определение, несмотря на явное наличие экземпляра. Не связывает

Редактировать: это не дубликат связанного вопроса, так как я использую явное создание экземпляров, и только определенный тип функций-членов не связывается (другие делают). Следующий код компилируется, но не связывается, и я не понимаю, почему. Это я…
1 ответ

Виртуальное наследование, явная реализация - возвращение ссылки / указателя на производный класс (ковариантные типы)

.hpp template &lt;typename T&gt; struct A { virtual A&amp; modify() = 0; }; template &lt;typename T&gt; struct B : virtual A&lt;T&gt; {}; template &lt;typename T&gt; struct C : B&lt;T&gt; { C&amp; modify() final; }; .cpp template &lt;typename T&gt; …
1 ответ

Явная реализация шаблона функции с целыми числами в качестве параметров шаблона

Я пытаюсь явно создать экземпляр шаблона функции. Пожалуйста, посмотрите фрагмент кода main.cpp: void func(int * ); int main() { int m = 3, n = 5; int *ptr; ptr = &amp;m; func(ptr); //function call &lt;do-Something&gt; ..... ..... } Функция func() н…
08 июн '15 в 06:49
1 ответ

Как экспортировать класс, полученный из явно созданного шаблона в Visual Studio?

В моей DLL у меня есть шаблон класса и второй класс, полученный из экземпляра этого шаблона. Оба класса должны быть экспортированы и использованы в других DLL. Компилятор - Visual Studio 2013. Я хочу, чтобы код шаблона создавался ровно в одной едини…
1 ответ

Использование функционально-шаблонного кода через границу g++-nvcc (включая ядра)

Предположим, я скомпилировал следующее с помощью nvcc компилятора NVIDIA CUDA: template&lt;typename T, typename Operator&gt; __global__ void fooKernel(T t1, T t2) { Operator op; doSomethingWith(t1, t2); } template&lt;typename T&gt; __device__ __host…
09 фев '15 в 12:54
1 ответ

Как вы заставляете шаблонизацию соответствовать базовому классу?

У меня есть функция шаблона, который явно создан для Base класс, но не для Derived учебный класс. Как я могу заставить использования, которые передают Derived класс (или другие производные классы) для сопоставления с Base учебный класс? Заголовочный…
30 янв '13 в 19:47
0 ответов

Явный шаблонный экземпляр и SFINAE

Я получаю ошибку компиляции так ясно, что я делаю что-то не так, но я не уверен, как это исправить, и нет ли возможности иметь явное создание экземпляра и SFINAE. Воспроизводимый пример минимален, поэтому он может не иметь полного смысла, но, по сут…
2 ответа

Несколько экземпляров специализированных шаблонов

У меня есть явно экземпляр класса шаблона со специализациями: // a.hh #pragma once template&lt;int N&gt; struct A { int foo(); }; // a.in #include "a.hh" template&lt;&gt; int A&lt;1&gt;::foo() { return 1; } // specialization for N=1 template&lt;&gt;…
1 ответ

Внешние шаблоны C++11: где они на самом деле нужны?

В C++03 у нас есть явные определения экземпляра шаблона (template class Foo&lt;int&gt;) которые вызывают создание экземпляра класса шаблона. В C++11 у нас есть явные объявления экземпляра шаблона (extern template class Foo&lt;int&gt;), который долже…
27 окт '16 в 09:37
6 ответов

Как явно создать экземпляр шаблона для всех членов вектора MPL в C++?

Рассмотрим следующий заголовочный файл: // Foo.h class Foo { public: template &lt;typename T&gt; void read(T&amp; value); }; Я хочу явно создать экземпляр Foo::read шаблон функции-члена в исходном файле для всех типов, включенных в boost::mpl::vecto…
1 ответ

Как создать базовые шаблоны классов явно?

Этот вопрос рассматривает явное воплощение шаблонных классов. Рассмотрим шаблонный класс B&lt;T&gt; производный от другого шаблона класса A&lt;T&gt;, Я хочу явно создать экземпляр B&lt;T&gt; потому что его методы должны вызываться из динамического с…
3 ответа

Время компоновки / компиляции относительно статических библиотек шаблонов

Кажется, существует общее соглашение не использовать исходные файлы для шаблонных классов (STL и boost), а также помещать реализацию в заголовок. Я предполагаю, что это значительно увеличит время, необходимое для компиляции исходных файлов, которые …