Вопросы по теме 'template-argument-deduction'
Обходной путь для вывода аргументов шаблона в невыведенном контексте
Рассмотрим следующий код:
#include <iostream>
template<class T>
struct outer {
struct inner {};
};
template<class T>
std::ostream& operator<<(std::ostream & stream,
typename...
1222 просмотров
schedule
11.06.2023
Разница между 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 просмотров
schedule
02.11.2023
Параметр шаблона по умолчанию или выведенный?
В следующих :
template<typename Type>
struct MyClass
{
template<typename OtherType> MyClass(const MyClass<OtherType>& x);
template<typename OtherType = Type> void test(const MyClass<OtherType>& x);
};...
527 просмотров
schedule
06.11.2022
доступ к членам шаблонного класса с переменным количеством шаблонных аргументов
У меня есть шаблонный класс с переменным количеством шаблонных аргументов. Как и в этих случаях (я не могу позволить себе C++11), хорошей практикой является создание класса по умолчанию, который мы называем none , и устанавливаем его по умолчанию,...
77 просмотров
schedule
13.01.2023
Не удалось определить тип шаблона для шаблона с переменным числом аргументов.
Я создал простой менеджер событий на основе обратного вызова, и он работает, но у меня есть некоторые ошибки с нулевыми аргументами шаблона.
class event_manager
{
public:
template <typename... T>
static void register_event(const...
440 просмотров
schedule
16.10.2023
Вывод шаблона не работает для ссылки на указатель функции
Я использую обходные пути и считаю, что приведение, которое они используют, очень уродливое, поэтому я написал пару шаблонных функций, чтобы выполнить приведение за меня.
// Cast a function pointer to a void *
template <typename RET_TYPE,...
539 просмотров
schedule
04.09.2022
Аргумент шаблона и вывод параметров std :: function
Предположим, что существует шаблонная функция foo() , которая принимает произвольное количество аргументов. Учитывая, что последний аргумент всегда std::function , как мне реализовать шаблон foo() , показанный ниже, таким образом, чтобы CbArgs...
996 просмотров
schedule
23.12.2023
Гарантируется ли, что параметр шаблона шаблона вызывает предоставленные пользователем руководства по выводу
Рассмотрим пример:
#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 просмотров
schedule
11.08.2023
Руководство по дедукции Variadic не взято g++, взято clang++ - кто прав?
Рассмотрим следующий код:
template <typename... Types>
struct list
{
template <typename... Args>
list(Args...)
{
static_assert(sizeof...(Types) > 0);
}
};
template <typename... Args>
list(Args...)...
501 просмотров
schedule
18.05.2024
Следует ли учитывать инициализацию аргумента руководства вывода при выводе специализации шаблона класса?
В ответ на этот вопрос я протестировал поведение как clang, так и gcc. Похоже, что оба компилятора по-разному интерпретируют стандарт С ++.
В приведенном ниже примере GCC отказывается компилировать, если некопируемый аргумент необходимо...
356 просмотров
schedule
20.01.2024
Определяемый пользователем оператор преобразования игнорируется для шаблона класса (не так для не-шаблонов)
Этот код компилируется (важным моментом является то, что F() принимает только A , а поскольку существует неявное преобразование из B в A , я могу легко передать ему B .)
struct A {};
struct B {
constexpr operator A () const {return...
72 просмотров
schedule
05.06.2023
Вывод ссылочного типа LValue
Существует довольно много дискуссий и пояснений по поводу вывода аргументов шаблона и, в частности, свертывания ссылок и «универсальных ссылок». В этом вопросе рассматриваются соответствующие детали: Как автоматически выводится тип? , а в этой...
68 просмотров
schedule
10.12.2023
Использование auto в параметрах шаблона: несколько примеров использования и как заставить его работать с массивами C постоянного размера?
У меня есть следующее примерное использование auto в параметрах шаблона (которое мне нравится независимо от их здравомыслия или наличия лучших альтернатив, я просто пытаюсь усвоить функцию «авто в параметрах шаблона»):
//1-Check if input is within...
60 просмотров
schedule
08.03.2023
Почему я не могу создать функцию-шаблон с необязательным аргументом UnaryPredicate?
Я пытаюсь создать шаблонную функцию с необязательным аргументом, и мне сложно понять, почему компиляция не выполняется. Это мой тестовый (надуманный) код:
#include <iostream>
#include <vector>
template <class UnaryPredicate>...
646 просмотров
schedule
25.05.2023
Выведение аргументов шаблона частичного класса в C ++ 17
В приведенном ниже примере мы используем функцию C ++ 17 «Вывод аргументов шаблона класса», чтобы сделать вывод, что val имеет тип Base<int, double, bool> :
template<class T, class U, class V>
struct Base {
Base(T, U) { };...
1130 просмотров
schedule
09.09.2023
Непонимание вариативных шаблонов и вывод типа шаблона
Я компилирую C++17 с кодом, подобным этому образцу:
#include <iostream>
#include <iterator>
class Foo {};
template <typename... Args,
typename ostream_type = ::std::basic_ostream<Args...>,
typename...
36 просмотров
schedule
27.01.2024
Компилятор выдает неоднозначную перегрузку для оператора
Я изучаю, как использовать std::chrono, и я хочу сделать шаблон класса Timer простым в использовании (определено в timer.h ). Программа тестирования прошла успешно, и все работало нормально, пока я не попытался использовать свой новый Таймер в...
201 просмотров
schedule
20.07.2023
Устранение неоднозначности перегруженной функции с заданным набором параметров
Я пытаюсь реализовать шаблон функции ovl таким образом, чтобы ovl<Foo, Bar>(f) возвращал перегрузку f с (Foo, Bar) , и очень удивлен тем, что происходит с моим наивным решением:
template <class... Args, class Ret>
constexpr auto...
93 просмотров
schedule
13.08.2022
как заставить функцию шаблона (оператор) выводить аргументы шаблона неявно?
У меня есть этот код, который мне нужно скомпилировать:
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 просмотров
schedule
13.11.2023