Описание тега template-argument-deduction
Template argument deduction is a compiler attempt to deduce template arguments when some are omitted.
7
ответов
Использовать один аргумент для вывода параметров шаблона?
Допустим, у меня есть функция шаблона, assign(), Он принимает указатель и значение и назначает значение цели указателя: template <typename T> void assign(T *a, T b) { *a = b; } int main() { double i; assign(&i, 2); } В этом случае я всегда…
02 июл '13 в 18:25
6
ответов
Вывести нетипичный параметр шаблона
Можно ли вывести нетипичный параметр шаблона из параметра функции шаблона? Рассмотрим этот простой шаблон: template <int N> constexpr int factorial() { return N * factorial<N - 1>(); } template <> constexpr int factorial<0>()…
12 янв '12 в 14:57
1
ответ
Руководство по частичному выводу C++17
Я пытаюсь написать руководство по выводу, которое обнаруживает только одно из множества typename из данного аргумента конструктора и требует от пользователя ввода int size вручную template <int size, typename T> struct Board { array<array&l…
28 май '19 в 23:11
1
ответ
C++, какой шаблон будет вызываться, если обе функции шаблона соответствуют списку аргументов
template<class T> void fn(T t){} template<class T> void fn(std::vector<T> vt){} void f() { std::vector<int> vt; fn(vt); } Я знаю, что будет вызвана вторая функция шаблона, но я не знаю правил сопоставления функций шаблона.
11 июн '20 в 05:38
0
ответов
Почему в таком случае не работает вывод аргументов шаблона класса?
#include <vector> template<typename T> struct A : public std::allocator<T> { }; template<typename T> using V = std::vector<T, A<T>>; int main() { auto v1 = std::vector{1, 2, 3}; // ok auto v2 = V{1, 2, 3}; // erro…
05 май '20 в 15:10
1
ответ
std::basic_string как параметр шаблона функции не может быть выведен из const char*
Почему ставит std::basic_string как параметр шаблона функции не сможет вывести из const char*, но его можно успешно вывести, когда он построен напрямую? #include <string> #include <iostream> template<class Char/*, class Traits, class …
10 авг '20 в 05:27
0
ответов
Невозможно вывести параметр шаблона из зависимой области
Я хочу вызвать функцию шаблона с выведенным вторым параметром шаблона. Функция шаблона опирается на два типа шаблона и принимает их аргумент и типы возвращаемых значений из зависимой области. Рассмотрим следующий пример: struct A { struct S { int a;…
18 июн '20 в 15:25
1
ответ
Типы классов C++ в параметрах шаблона, не являющихся типами: руководство по выводам не работает
Проблема Я использую функцию С ++2a, которая позволяет использовать структуры / std::array в качестве аргументов шаблона (g++-9.2.0, не поддерживается в clangпока что). Функция называетсяClass types in non-type template parameters и предложено в P07…
23 янв '20 в 18:47
1
ответ
Лямбда высокого порядка С ++ не может вывести возвращаемый тип лямбда
У меня есть задание создать практически универсальный класс, который получает какой-то входной источник целых чисел и какой-то потребитель, который потребляет эти входные данные. Мне это удалось, но это уродливее, чем мне хотелось бы. Так что это ча…
26 мар '20 в 15:09
1
ответ
Конструкторы C++ с 0/1 аргументом не связываются должным образом при передаче в конструктор шаблона
В приведенном ниже примере кода у меня есть класс с шаблонным конструктором с одним аргументом, который называется Acceptor1. Я хочу передать объекты типаFoo, Bar, or Bazк его конструктору, связывая вызовы конструктора. (На самом деле этот упрощенны…
18 мар '20 в 08:56
2
ответа
Аргумент шаблона по умолчанию теряет свой ссылочный тип
Рассмотреть возможность #include <iostream> #include <type_traits> template <class T, class ARG_T = T&> T foo(ARG_T v){ return std::is_reference<decltype(v)>::value; } int main() { int a = 1; std::cout << foo<int…
06 сен '19 в 13:21
2
ответа
Ошибка замены с `std::function` и ранее выведенным параметром шаблона - почему?
Рассмотрим следующий код: template <typename> struct S { }; void g(S<int> t); template <typename T> void f(T, std::function<void(S<T>)>); При попытке вызвать f(0, g); Я получаю следующую ошибку: error: no matching funct…
27 сен '19 в 16:52
2
ответа
Как разрешить функции принимать указанные типы?
Поэтому я хочу, чтобы моя функция принимала шаблонный параметр, примерно так: template <typename T> void foo(T test) Я только хочу fooпринять все эти типы, которые я укажу. Скажи, что у меня есть что-то вродеImage<cam1>, Image<cam2>…
19 окт '19 в 00:29
1
ответ
Возможен ли вывод аргументов "глубокого" шаблона?
Дело в том, что у меня есть функция шаблона, и я хочу использовать ее как обратный вызов: template <class ...Ind> void fill_given_rows(mat& matrix, Ind ...ind){ Он вызывает такую функцию-член класса: template<typename F, class ... Arg…
20 окт '19 в 01:53
3
ответа
Получить тип аргументов функции как кортеж
Проблема Для любого типа функции (или вызываемого) Function, как мне получить все его типы аргументов как кортеж? Например, мне нужна черта function_traits<Function>::arguments, где: int f(); typename function_traits<decltype(f)>::argume…
23 авг '19 в 11:09
2
ответа
Функция шаблона Variadic для создания строки
Я новичок в вариативных шаблонных функциях. Я написал простой класс,StringStream, который имеет вариативную функцию шаблона, которая создает std::string из переменных аргументов шаблона - строк, целых чисел и т. д. #include <string> #include &…
07 сен '19 в 08:50
1
ответ
Назначенные инициализаторы C++20 с шаблонными типами
Как назначенные инициализаторы (C++20) должны работать с CTAD? Этот код отлично работает в gcc9.2, но не работает с clang8 template <typename int_t=int, typename float_t=float> struct my_pair { int_t first; float_t second; }; template<typen…
11 сен '19 в 12:48
1
ответ
Руководства по выводам std::set работают не так, как я ожидал
Я ожидаю, что руководства по дедукции правильно выведут тип в приведенном ниже примере, но они этого не делают: #include <set> struct Foo { }; bool cmp(const Foo&, const Foo& ); std::set my_set({Foo{}, Foo{}}, cmp); Ошибка компилятора …
30 сен '19 в 18:15
0
ответов
Выведение параметра шаблона из параметра конструктора constexpr
У меня есть функция форматирования строки, которая предназначена только для приема строкового литерала в качестве строки формата. Я хотел бы подсчитать количество заполнителей формата во время компиляции и статического утверждения, что количество за…
22 окт '19 в 08:13
1
ответ
Непонимание вариативных шаблонов и вывода типа шаблона
Я компилирую C++17 с кодом, похожим на этот пример: #include <iostream> #include <iterator> class Foo {}; template <typename... Args, typename ostream_type = ::std::basic_ostream<Args...>, typename ostreambuf_iterator_type = ::s…
22 окт '19 в 01:33