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

Обходной путь для вывода аргументов шаблона в невыведенном контексте
Рассмотрим следующий код: #include <iostream> template<class T> struct outer { struct inner {}; }; template<class T> std::ostream& operator<<(std::ostream & stream, typename...
1222 просмотров

Разница между int a[5] и int (&a)[5] в выводе параметров шаблона
Этот вопрос касается функций, которые принимают массивы статически известного размера. Возьмем, к примеру, следующую минимальную программу: #include <iostream> template<size_t N> void arrfun_a(int a[N]) { for(size_t i = 0; i...
663 просмотров

Параметр шаблона по умолчанию или выведенный?
В следующих : template<typename Type> struct MyClass { template<typename OtherType> MyClass(const MyClass<OtherType>& x); template<typename OtherType = Type> void test(const MyClass<OtherType>& x); };...
527 просмотров

доступ к членам шаблонного класса с переменным количеством шаблонных аргументов
У меня есть шаблонный класс с переменным количеством шаблонных аргументов. Как и в этих случаях (я не могу позволить себе C++11), хорошей практикой является создание класса по умолчанию, который мы называем none , и устанавливаем его по умолчанию,...
77 просмотров

Не удалось определить тип шаблона для шаблона с переменным числом аргументов.
Я создал простой менеджер событий на основе обратного вызова, и он работает, но у меня есть некоторые ошибки с нулевыми аргументами шаблона. class event_manager { public: template <typename... T> static void register_event(const...
440 просмотров

Вывод шаблона не работает для ссылки на указатель функции
Я использую обходные пути и считаю, что приведение, которое они используют, очень уродливое, поэтому я написал пару шаблонных функций, чтобы выполнить приведение за меня. // Cast a function pointer to a void * template <typename RET_TYPE,...
539 просмотров

Аргумент шаблона и вывод параметров std :: function
Предположим, что существует шаблонная функция foo() , которая принимает произвольное количество аргументов. Учитывая, что последний аргумент всегда std::function , как мне реализовать шаблон foo() , показанный ниже, таким образом, чтобы CbArgs...
996 просмотров

Гарантируется ли, что параметр шаблона шаблона вызывает предоставленные пользователем руководства по выводу
Рассмотрим пример: #include <type_traits> #include <string> template <template <class> class TT> //#1 struct Foo { static void foo() { static_assert(std::is_same_v<decltype(TT("abc")),...
231 просмотров

Руководство по дедукции Variadic не взято g++, взято clang++ - кто прав?
Рассмотрим следующий код: template <typename... Types> struct list { template <typename... Args> list(Args...) { static_assert(sizeof...(Types) > 0); } }; template <typename... Args> list(Args...)...
501 просмотров

Следует ли учитывать инициализацию аргумента руководства вывода при выводе специализации шаблона класса?
В ответ на этот вопрос я протестировал поведение как clang, так и gcc. Похоже, что оба компилятора по-разному интерпретируют стандарт С ++. В приведенном ниже примере GCC отказывается компилировать, если некопируемый аргумент необходимо...
356 просмотров

Определяемый пользователем оператор преобразования игнорируется для шаблона класса (не так для не-шаблонов)
Этот код компилируется (важным моментом является то, что F() принимает только A , а поскольку существует неявное преобразование из B в A , я могу легко передать ему B .) struct A {}; struct B { constexpr operator A () const {return...
72 просмотров

Вывод ссылочного типа LValue
Существует довольно много дискуссий и пояснений по поводу вывода аргументов шаблона и, в частности, свертывания ссылок и «универсальных ссылок». В этом вопросе рассматриваются соответствующие детали: Как автоматически выводится тип? , а в этой...
68 просмотров

Использование auto в параметрах шаблона: несколько примеров использования и как заставить его работать с массивами C постоянного размера?
У меня есть следующее примерное использование auto в параметрах шаблона (которое мне нравится независимо от их здравомыслия или наличия лучших альтернатив, я просто пытаюсь усвоить функцию «авто в параметрах шаблона»): //1-Check if input is within...
60 просмотров

Почему я не могу создать функцию-шаблон с необязательным аргументом UnaryPredicate?
Я пытаюсь создать шаблонную функцию с необязательным аргументом, и мне сложно понять, почему компиляция не выполняется. Это мой тестовый (надуманный) код: #include <iostream> #include <vector> template <class UnaryPredicate>...
646 просмотров

Выведение аргументов шаблона частичного класса в C ++ 17
В приведенном ниже примере мы используем функцию C ++ 17 «Вывод аргументов шаблона класса», чтобы сделать вывод, что val имеет тип Base<int, double, bool> : template<class T, class U, class V> struct Base { Base(T, U) { };...
1130 просмотров

Непонимание вариативных шаблонов и вывод типа шаблона
Я компилирую C++17 с кодом, подобным этому образцу: #include <iostream> #include <iterator> class Foo {}; template <typename... Args, typename ostream_type = ::std::basic_ostream<Args...>, typename...
36 просмотров

Компилятор выдает неоднозначную перегрузку для оператора
Я изучаю, как использовать std::chrono, и я хочу сделать шаблон класса Timer простым в использовании (определено в timer.h ). Программа тестирования прошла успешно, и все работало нормально, пока я не попытался использовать свой новый Таймер в...
201 просмотров

Устранение неоднозначности перегруженной функции с заданным набором параметров
Я пытаюсь реализовать шаблон функции ovl таким образом, чтобы ovl<Foo, Bar>(f) возвращал перегрузку f с (Foo, Bar) , и очень удивлен тем, что происходит с моим наивным решением: template <class... Args, class Ret> constexpr auto...
93 просмотров

как заставить функцию шаблона (оператор) выводить аргументы шаблона неявно?
У меня есть этот код, который мне нужно скомпилировать: int main () { const Matrix<int, 3, 2> m1; // Creates 3*2 matrix, with all elements set to 0; Matrix<int, 3, 3> m2(4); // Creates 3*3 matrix, with all elements equals to 4;...
45 просмотров