Вопросы по теме 'template-argument-deduction'

Почему автоматическое определение типа и вывод типа шаблона различаются для инициализаторов в фигурных скобках?
Я понимаю, что для инициализатора в скобках auto выведет тип std::initializer_list , в то время как определение типа шаблона не удастся: auto var = { 1, 2, 3 }; // type deduced as std::initializer_list<int> template<class T> void...
1442 просмотров

Руководство по выводу шаблона для функции?
Я пытаюсь написать несколько шаблонных функций, которые принимают либо std::basic_string , либо массив символов, из которого можно построить basic_string . Мое текущее решение: #include <string> template<typename CharT> void...
2270 просмотров

Выполнение инициализации шаблонного класса с использованием других шаблонных классов в вариативных аргументах конструктора
Я хотел создать простой HTML-конструктор dom на C ++ и решил использовать шаблонный класс tag<> для описания типа этого тега. Я уже использовал другие методы для создания DOM на C ++ с некоторым успехом, но дизайн не обрабатывал...
54 просмотров

Компилятор параметров шаблона С ++ не может вывести
вот функция для регистрации. template <typename ReqT, typename RespT> bool RegisterCmdHandler(int cmd_id, std::function<int(int, const ReqT&, RespT&)> sync_handler) { // ... do something with sync_handler and register it...
50 просмотров

Странный синтаксис для передачи параметра const char для определения длины в качестве параметра шаблона. Что происходит?
Я нашел эту жемчужину в нашей кодовой базе. constexpr bool ConstexprStrBeginsWithImpl(const char* str, const char* subStr) { return !subStr[0] ? true : (str[0] == subStr[0] && ConstexprStrBeginsWithImpl(str + 1, subStr + 1)); }...
34 просмотров

g ++ c ++ 17 вывод аргументов шаблона класса не работает в очень конкретном случае
У меня такой код: template <class T> class lit { public: lit(T l) : val(l) {} T val; }; template <class T> class cat { public: cat(lit<T> const& a, lit<T> const& b) : a(a), b(b) {} lit<T>...
746 просмотров

Что такое процедура частичного заказа при вычете шаблона
Читая стандарт C ++ 11, я не могу полностью понять смысл следующего утверждения. Пример очень приветствуется. Для определения частичного упорядочивания используются два набора типов. Для каждого из задействованных шаблонов существует исходный...
4124 просмотров

Проблема с определением типа возвращаемого значения для оболочки функций-членов
У меня есть набор методов с разными сигнатурами, для которых нужен один и тот же префиксный и постфиксный код, поэтому я хотел бы аккуратно обернуть каждый из них. Я пытаюсь сформулировать вариативный шаблон C ++ 14 для общей оболочки для моих...
61 просмотров

Могут ли руководства по выводу шаблонов вызывать функции constexpr?
У меня есть собственный тип массива фиксированного размера, который я хочу constexpr конструировать из std::initializer_list без необходимости явно определять аргумент шаблона размера. Я думал, что смогу использовать руководство по выводу...
691 просмотров

Возможно ли, чтобы параметр шаблона был ссылочным типом?
Я начал изучать C++, и в настоящее время я пытаюсь начать работу с шаблонами, поэтому, пожалуйста, потерпите меня, если моя формулировка не на 100% точна. Я использую следующую литературу: Шаблоны C++: полное руководство (2-е издание)...
613 просмотров

Смешивание псевдонимов и специализаций шаблонов
Я пытаюсь найти лучший метод, чтобы иметь своего рода «объект», который может быть либо специализированным, либо «связанным» с другим типом. Например, вы не можете специализировать класс, чтобы он стал простым int, и вы не можете использовать...
89 просмотров

Ошибка замены для аргумента шаблона шаблона
Я хочу, чтобы вспомогательная функция создавала для меня экземпляр класса. В настоящее время он не может компилироваться в clang (хотя он компилируется в gcc), но мне нужно, чтобы он работал и в clang. В настоящее время я использую clang version...
767 просмотров

Почему вывод аргумента шаблона для шаблонов классов не работает в простой структуре?
С++ 17 поддерживает template argument deduction for class templates . См. www.open-std.org/ jtc1/sc22/wg21/docs/papers/2016/p0091r3.html для получения подробной справочной информации. Однако приведенный ниже код не работает должным...
296 просмотров

Вывод шаблона размера массива
У меня есть класс, в котором хранится std::array . Размер массива оценивается во время компиляции, это связано с тем, что приложение работает на встроенном устройстве, поэтому нет динамических распределений :(. Код выглядит примерно так:...
200 просмотров

g++ и clang++ разное поведение со специализацией шаблона для значения шаблона `sizeof()`
Очередной "кто прав между g++ и clang++?" вопрос к стандартным гуру. Учитывая следующий тривиальный код #include <utility> template <std::size_t N, typename = std::make_index_sequence<N>> struct foo; template...
93 просмотров

Как включить конструктор шаблона с переменным числом аргументов, только если указано более n аргументов?
У меня есть класс со следующими конструкторами: template<typename T> class MyClass { public: MyClass() = default; explicit MyClass(T val) : value_1(val) { /* ... */ } explicit MyClass(T val, T val2) : value_1(val), value_2(val2)...
602 просмотров

Назначенные инициализаторы С++ 20 с шаблонными типами
Как назначенные инициализаторы (С++ 20) должны работать с CTAD? Этот код отлично работает в gcc9.2, но не работает с clang8. template <typename int_t=int, typename float_t=float> struct my_pair { int_t first; float_t second; };...
320 просмотров

Сделать функцию, принимающую необязательную, принять необязательную?
Я пытаюсь написать синтаксический сахар в монадном стиле над std::optional . Пожалуйста примите к сведению: template<class T> void f(std::optional<T>) {} Как есть, эту функцию нельзя вызывать с необязательным T 1 (например,...
3027 просмотров

Почему компилятор не может определить значение моего шаблона из аргумента функции?
Следующее не компилируется: enum E {A,B,C}; template<E m> void foo(E m) {} int main() { foo(A); return 0; } Я получаю следующие ошибки: объявление 'E m': void foo (E m) {}: shadows template parm 'E m' ошибка: нет...
669 просмотров

Могу ли я использовать первый параметр шаблона по умолчанию?
У меня есть метод шаблона с двумя параметрами имени типа (на самом деле это QObject::connect() - см. этот ответ и другой ответ ). Поскольку имена типов предназначены для указателей на элементы, дедукция может завершиться ошибкой, если переданное...
249 просмотров