Вопросы по теме 'template-argument-deduction'
Почему автоматическое определение типа и вывод типа шаблона различаются для инициализаторов в фигурных скобках?
Я понимаю, что для инициализатора в скобках auto выведет тип std::initializer_list , в то время как определение типа шаблона не удастся:
auto var = { 1, 2, 3 }; // type deduced as std::initializer_list<int>
template<class T> void...
1442 просмотров
schedule
26.11.2021
Руководство по выводу шаблона для функции?
Я пытаюсь написать несколько шаблонных функций, которые принимают либо std::basic_string , либо массив символов, из которого можно построить basic_string .
Мое текущее решение:
#include <string>
template<typename CharT>
void...
2270 просмотров
schedule
04.11.2021
Выполнение инициализации шаблонного класса с использованием других шаблонных классов в вариативных аргументах конструктора
Я хотел создать простой HTML-конструктор dom на C ++ и решил использовать шаблонный класс tag<> для описания типа этого тега.
Я уже использовал другие методы для создания DOM на C ++ с некоторым успехом, но дизайн не обрабатывал...
54 просмотров
schedule
22.11.2021
Компилятор параметров шаблона С ++ не может вывести
вот функция для регистрации.
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 просмотров
schedule
04.11.2021
Странный синтаксис для передачи параметра 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 просмотров
schedule
12.09.2021
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 просмотров
schedule
19.02.2022
Что такое процедура частичного заказа при вычете шаблона
Читая стандарт C ++ 11, я не могу полностью понять смысл следующего утверждения. Пример очень приветствуется.
Для определения частичного упорядочивания используются два набора типов. Для каждого из задействованных шаблонов существует исходный...
4124 просмотров
schedule
03.03.2022
Проблема с определением типа возвращаемого значения для оболочки функций-членов
У меня есть набор методов с разными сигнатурами, для которых нужен один и тот же префиксный и постфиксный код, поэтому я хотел бы аккуратно обернуть каждый из них. Я пытаюсь сформулировать вариативный шаблон C ++ 14 для общей оболочки для моих...
61 просмотров
schedule
27.02.2022
Могут ли руководства по выводу шаблонов вызывать функции constexpr?
У меня есть собственный тип массива фиксированного размера, который я хочу constexpr конструировать из std::initializer_list без необходимости явно определять аргумент шаблона размера.
Я думал, что смогу использовать руководство по выводу...
691 просмотров
schedule
10.03.2022
Возможно ли, чтобы параметр шаблона был ссылочным типом?
Я начал изучать C++, и в настоящее время я пытаюсь начать работу с шаблонами, поэтому, пожалуйста, потерпите меня, если моя формулировка не на 100% точна.
Я использую следующую литературу:
Шаблоны C++: полное руководство (2-е издание)...
613 просмотров
schedule
30.03.2022
Смешивание псевдонимов и специализаций шаблонов
Я пытаюсь найти лучший метод, чтобы иметь своего рода «объект», который может быть либо специализированным, либо «связанным» с другим типом.
Например, вы не можете специализировать класс, чтобы он стал простым int, и вы не можете использовать...
89 просмотров
schedule
23.04.2022
Ошибка замены для аргумента шаблона шаблона
Я хочу, чтобы вспомогательная функция создавала для меня экземпляр класса. В настоящее время он не может компилироваться в clang (хотя он компилируется в gcc), но мне нужно, чтобы он работал и в clang. В настоящее время я использую clang version...
767 просмотров
schedule
02.05.2022
Почему вывод аргумента шаблона для шаблонов классов не работает в простой структуре?
С++ 17 поддерживает template argument deduction for class templates .
См. www.open-std.org/ jtc1/sc22/wg21/docs/papers/2016/p0091r3.html для получения подробной справочной информации.
Однако приведенный ниже код не работает должным...
296 просмотров
schedule
20.05.2022
Вывод шаблона размера массива
У меня есть класс, в котором хранится std::array .
Размер массива оценивается во время компиляции, это связано с тем, что приложение работает на встроенном устройстве, поэтому нет динамических распределений :(. Код выглядит примерно так:...
200 просмотров
schedule
23.05.2022
g++ и clang++ разное поведение со специализацией шаблона для значения шаблона `sizeof()`
Очередной "кто прав между g++ и clang++?" вопрос к стандартным гуру.
Учитывая следующий тривиальный код
#include <utility>
template <std::size_t N, typename = std::make_index_sequence<N>>
struct foo;
template...
93 просмотров
schedule
08.06.2022
Как включить конструктор шаблона с переменным числом аргументов, только если указано более 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 просмотров
schedule
09.08.2022
Назначенные инициализаторы С++ 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 просмотров
schedule
11.09.2022
Сделать функцию, принимающую необязательную, принять необязательную?
Я пытаюсь написать синтаксический сахар в монадном стиле над std::optional . Пожалуйста примите к сведению:
template<class T>
void f(std::optional<T>)
{}
Как есть, эту функцию нельзя вызывать с необязательным T 1 (например,...
3027 просмотров
schedule
18.09.2022
Почему компилятор не может определить значение моего шаблона из аргумента функции?
Следующее не компилируется:
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 просмотров
schedule
29.09.2022
Могу ли я использовать первый параметр шаблона по умолчанию?
У меня есть метод шаблона с двумя параметрами имени типа (на самом деле это QObject::connect() - см. этот ответ и другой ответ ). Поскольку имена типов предназначены для указателей на элементы, дедукция может завершиться ошибкой, если переданное...
249 просмотров
schedule
23.09.2022