Описание тега template-deduction
Вывод аргументов шаблона - это попытка компилятора вывести аргументы шаблона, когда некоторые из них опущены.
2
ответа
Автоматическое выведение типов шаблонов, путающие указатели и ссылки
Пытаясь отладить некоторый код, я создал класс, который выводит значения сложной иерархии объектов в текстовый файл, чтобы я мог сравнить случай, когда он работает, со случаем, когда это не так. Я реализовал класс следующим образом (приведен простой…
22 сен '17 в 09:39
1
ответ
Шаблонный аргумент и вывод параметров std::function
Предположим, есть функция шаблона foo() который принимает произвольное количество аргументов. Учитывая последний аргумент, всегда std::functionкак мне реализовать foo() шаблон показан ниже таким образом, что CbArgs будет содержать это std::functionп…
19 фев '17 в 22:34
1
ответ
Разрешение перегрузки шаблона функции с двумя пакетами параметров
Рассмотрим следующий код: #include<iostream> template<class..., class... T> int f(T...) { return 1; } template<class... T> int f(T...) { return 2; } int main() { std::cout << f(1); } Компилирует и печатает 1 на gcc 8.2, но не…
18 ноя '18 в 05:27
0
ответов
Авто в качестве аргумента шаблона
template<typename> struct CL{}; CL<char> fnc(); int main() { CL<auto> cl=fnc(); //error } Почему это не правильно? В чем проблема вывести авто как символ?
12 апр '15 в 14:28
0
ответов
Вывести параметр шаблона внешнего класса в вызов функции вложенного класса?
Есть ли способ вывести внешний шаблон во вложенном классе? template<class T> struct A{ struct B{}; }; template<class T> void f(typename A<T>::B b){} // hard to deduce T? int main(){ A<double>::B b; f(b); // no matching functi…
16 янв '19 в 11:34
0
ответов
"автоматическая" разница между указателями и ссылками
Учитывая этот код: int& some_class::ret_ref(){ return this->some_integer; } int* some_class::ret_ptr(){ return &(this->some_integer); } int main(){ some_class c; auto p=c.ret_ptr(); auto r=c.ret_ref(); } Во время компиляции: p является…
25 июл '16 в 21:45
2
ответа
Как make_pair неявно выводит типы?
Хорошо известно, что make_pair выводит типы. Вот почему это существует, и это удобно. Теперь посмотрим на этот пример: std::pair <int,int> foo; std::pair <int,int> bar; foo = std::make_pair (10,20); bar = std::make_pair (10.5,'A'); //ok:…
25 фев '13 в 06:27
1
ответ
Какой шаблон foo будет создан?
Учитывая этот код: #include <type_traits> template<char ...Cs> auto foo() -> typename std::enable_if<(sizeof...(Cs) > 1)>::type{ } template<char C> void foo() { } int main(){ foo<'s'>(); } У меня есть вышеупомянут…
03 июн '14 в 02:28
3
ответа
Лямбда преобразуется в bool вместо определения типа указателя на функцию
Я хотел реализовать перегрузку для operator<< это позволило мне вызвать данную функцию и вывести результат. Поэтому я написал перегрузку, но преобразование в bool выбрано, и при написании функции оно не компилируется. РЕДАКТИРОВАТЬ: Знайте, чт…
14 мар '18 в 18:09
0
ответов
C++17 шаблонный конструктор класса удержания шаблона
Вопрос тесно связан с недавно реализованным выводом шаблона класса C++17 из параметров конструктора. На самом деле это то, что я пытаюсь сделать: template<typename H, typename B> struct A { typedef H value_type; template<typename I> A(B …
28 ноя '18 в 07:22
1
ответ
Должен ли "вывод аргументов шаблона для шаблонов классов" выводить пустые пакеты параметров для шаблонов классов с переменным числом аргументов?
Предложение "Вычет аргументов шаблона для шаблонов классов" ( P0091R2) содержит следующий пример: template<class ... Ts> struct X { X(Ts...) }; X x1{1}; // OK X<int> X x11; // OK X<> (Помимо того факта, что в определении конструкто…
11 ноя '16 в 21:55
1
ответ
Параметр шаблона std::function не может быть выведен
Я работаю над кодом, как следующий #include <functional> template <typename Type> void foo(const std::function<void(const Type&)> & handler) {} void goo (const int&){} int main() { foo([](const int&){}); foo(goo); }…
08 июл '18 в 16:43
2
ответа
Почему не работает вывод аргументов шаблона?
Следующая игрушечная программа преобразует тип музыки в соответствующий цвет. Он компилируется и выполняется просто отлично - преобразование COUNTRY терпит неудачу, как и ожидалось, и conversion() функция возвращает значение по умолчанию, WHITE, Одн…
16 июл '15 в 19:04
1
ответ
Прекрасно переадресация функции оболочки?
Рассмотрим следующий функтор, чтобы помочь определить, какая версия его operator() называется. struct functor { void operator()() {std::cout << "functor::operator" << std::endl;} void operator()() const {std::cout << "functor::oper…
22 фев '18 в 09:12
2
ответа
Что такое шаблоны вывода и когда мы должны их использовать?
Стандарт C++17 вводит "руководство по выводу шаблона". Я полагаю, что они имеют какое-то отношение к новому выводу аргументов шаблона для конструкторов, представленному в этой версии стандарта, но я еще не видел простого объяснения в стиле FAQ того,…
03 дек '16 в 19:35
2
ответа
Получить типы классов для шаблонов
У меня есть функция шаблона, как это: template<class RandomAccessIterator, class T, class Func> T reduce(RandomAccessIterator first, RandomAccessIterator last, const T& initial_value, Func func) { // Some code; return cur_value; } Я не мог…
18 фев '17 в 15:49
1
ответ
Вывод аргумента шаблона для указателя на функцию (g++ и ICC против Clang++ и VC++)
Рассмотрим следующую программу: #include <iostream> template <typename T> void foo(const T* x) { x(); } void bar() { std::cout<<"bar() is called\n"; } int main() { foo(bar); } Хорошо компилируется на clang++ & VC++ но g++ выдает сл…
15 мар '18 в 09:30
1
ответ
Вывод LValue Тип ссылки
Существует довольно много дискуссий и разъяснений относительно вывода аргументов шаблона и, в частности, свертывания ссылок и "универсальных ссылок". Этот вопрос проходит через соответствующие детали: как автоматически выводить тип? и эта статья Ско…
22 ноя '18 в 16:14
3
ответа
Шаблон функции не может определить тип, если типы T и U совпадают
Этот вопрос связан с ответом, который я получил вчера. Для следующей функции я получаю ошибку couldn't deduce template parameter ‘V’ если оба T а также U являются std::complex<double>, Если T а также U отличаются, функция компилируется и работ…
26 июл '13 в 18:47
2
ответа
Вычитание шаблона C++ не работает
Для следующего кода: #include<functional> template<typename T> void f(std::function<void(T)> g) { } template<typename T> void g(T x) { } int main() { f(&g<int>); } Компилятор C++14 выдает ошибку: no matching functio…
22 дек '16 в 23:42