Описание тега deduction-guide

1 ответ

Могу ли я добавить руководство по выводам в пространство имен `std`?

Предположим, я хочу создать новое руководство по дедукции, которое сделает возможным следующее? std::string str; std::basic_string_view sv = str; Будет ли это приемлемой настройкой?
1 ответ

Как автоматически вывести параметр шаблона для параметра функции типа basic_string_view или подобного?

Следующее не работает: template<class charT, class traits = std::char_traits<charT> > void f(std::basic_string_view<charT, traits> sv) { } int main(){ std::basic_string_view sv = "no";//ok std::basic_string_view svw = L"shit";//ok …
1 ответ

Почему руководство по выводам классов не работает при использовании typedef?

В фрагменте кода, который я сейчас пишу, я использую руководство по выбору классов. Вы можете найти фрагмент кода, сокращенный до простого (но бессмысленного примера) ниже: У меня есть классUser, который получает свой первый параметр шаблона из перв…
19 фев '20 в 02:30
1 ответ

Ошибка вариативного шаблона: "В экземпляре" (gcc 9.2)

Я изучаю вариативный шаблон на С ++17 на YouTube-канале Джейсона Тернера, а затем копирую его примерный код (показан ниже). В своем видео он использует сайт https://godbolt.org/ с gcc 7. #include <utility> template<typename ... B> struct…
1 ответ

Какие у меня есть варианты добавления руководств по вычету для типов stl

В этом посте уже объясняется, как добавление руководств по дедукции в пространство имен std не определено.Теперь то, что мне действительно хотелось бы сделать, это следующее: namespace std { // undefined behavior template <class... U> array(c…
1 ответ

Руководство по вычету для параметра шаблона шаблона

У меня есть набор класса структуры как таковой: template<typename T> struct Foo { T x_; T y_; constexpr Foo(T x, T y) : x_{x}, y_{y} {} }; template<typename T, typename U, template<U> class Func> class Bar { private: Foo<T> f…
03 июн '20 в 06:55
2 ответа

Шаблон многомерного массива с вычетом размерности

Я хочу сделать NDArray шаблон с фиксированным размером, но его размер можно изменять по каждому измерению. Мой вопрос в том, как заставить его определять размеры в конструкторе в зависимости от того, сколько пар {}используется? Элементы в конструкто…
1 ответ

Выведенные конфликтующие типы без шаблона

Я пытаюсь создать тип, который может хранить либо int, либо double, либо uint, например: struct Value { /*...*/ Value& operator=(const int value) { /*...*/ } Value& operator=(const double value) { /*...*/ } Value& operator=(const uint va…
1 ответ

Как я могу создать руководства по выводу для псевдонимов шаблонов в C++20?

Предположим, у меня есть шаблон класса / структуры вместе с явным руководством по выводам для его конструктора. Пусть у этого класса есть два параметра шаблона, один из которых может быть выведен руководством по дедукции, а другой - нет. template &l…
2 ответа

В чем смысл std::make_optional

Все std::make_делаются избыточными в C++17 с введением вывода аргументов шаблона класса (кромеmake_unique а также make_shared). Так в чем смысл std::make_optional ? Насколько я могу судить, он делает то же самое, что и руководство по дедукции дляstd…
05 июл '20 в 01:01
0 ответов

Руководство по дедукции C++17, определенное внутри класса, неэффективно внутри этого класса, но полезно вне класса

#include <variant> struct A { }; struct B { }; struct Test { template<typename Ts> struct overloaded : Ts { }; // 1st Deduction Guide template<typename Ts> overloaded(Ts)->overloaded<Ts>; // 2nd Deduction Guide for class &…
1 ответ

Как написать руководство по дедукции для псевдонимов агрегатных шаблонов?

С помощью C++20 возможно создание руководящих принципов вывода для шаблона псевдонима (См. Раздел "Вывод для шаблонов псевдонимов" на https://en.cppreference.com/w/cpp/language/class_template_argument_deduction). Тем не менее, я не мог заставить их …
2 ответа

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

У меня есть зачатки матричного класса. Вот код - template<int h, int w = h> class mat { public: mat() : values(h, std::vector<double>(w)) { if (w == h) { int x = 0; for (int y = 0; y < h; y++) { values[y][x] = 1; x++; } } } mat(std::i…
12 мар '21 в 05:23
0 ответов

Вывод шаблона с некоторыми аргументами, предоставленными пользователем

Допустим, есть класс с двумя параметрами шаблона template<typename A, typename B> class C { C(B::X x) {} }; возможно ли иметь руководство по дедукции, в котором только один из параметров предполагается, а другой задается пользователем? templat…
1 ответ

Можно ли сохранить как переменную с пометкой constexpr, так и переменную длительности статического хранения через тип класса с руководством по дедукции?

Рассмотрим следующий фрагмент кода: template <typename T> struct wrap { T thing; constexpr wrap(T thing) : thing(thing) {} }; template <typename T> wrap(const T&) -> wrap<T>; template <wrap V> void fun(); struct X { in…
10 ноя '21 в 22:02
1 ответ

clang vs gcc — CTAD структуры, полученной из параметра шаблона

Рассмотрим следующий код: template <typename B> struct D : B { }; D d{[]{ }}; gcc 12.x принимает его и выводит d быть D</* type of lambda */> как и ожидалось. clang 14.x отклоняет его со следующей ошибкой: <source>:4:3: error: no v…
11 янв '22 в 04:27
0 ответов

любой альтернативный вывод для вывода аргумента шаблона класса?

У меня есть шаблон класса: template <typename T, std::size_t N> class iterator { explicit iterator(T*); }; Я попытался использовать функцию С++17. Class template argument deduction (CTAD)вывести , но я не могу этого сделать, так как нет способ…
1 ответ

Руководство по выводу для списка инициализаторов фигурных скобок

Существует реализация, очень похожая на std::initializer_listиспользуется в среде, где стандартная библиотека C++ недоступна: template<typename T> class initializer_list { public: using value_type = T; using reference = const T &; using co…
1 ответ

Кандидат шаблона игнорируется, несмотря на предоставленное пользователем руководство по выводу

У меня есть структура, похожая на , но она может содержать значения нескольких типов в качестве нетиповых параметров шаблона (вроде кортежа времени компиляции). Он неявно конструируется из std::integer_sequenceс помощью constexprконструктор и опреде…
1 ответ

Требуются ли в руководствах по дедукции спецификаторы noexcept?

По некоторым причинам я всегда думал, что руководства по дедукции должны иметь одинаковую -ность конструктора, на который они ссылаются. Например: template<typename T> struct clazz { clazz(const T &) noexcept {} }; clazz(const char &) …
09 апр '21 в 15:01