Почему вычет шаблонов-аргумента работает по-разному для функциональных частей по сравнению с классовыми отображениями (чC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему вычет шаблонов-аргумента работает по-разному для функциональных частей по сравнению с классовыми отображениями (ч

Сообщение Anonymous »

У меня есть структурированный класс, такой как этот, где Fixdstr неявно конструируется из строкового литерала:

Код: Выделить всё

template
struct ParserCtx {
Parser parser;

ParserCtx(std::string_view description, Parser&& parser)
: parser(std::move(parser))
{}
};
Я намеревался использовать его следующим образом, причем T выводится из вызовов конструктора.

Код: Выделить всё

ParserCtx{"desc", Parser{1, 2.0, 3.0f}};
< /code>
Однако, как вы знаете, это не работает, потому что CTAD-это или ничего. Из CPPREEFERFEREFERE: < /p>

Вывержение аргумента шаблона класса выполняется только в том случае, если в списке аргументов шаблона нет списка аргументов шаблона. Если указан список аргументов шаблона, вывод не происходит.template
auto ParserCtx(std::string_view desc, Parser&& parser) -> impl::ParserCtx {
return {desc, std::move(parser)};
}

ParserCtx("desc", Parser{1, 2.0, 3.0f});
Тем не менее, мне пришло в голову, что я действительно видел это много раз раньше, когда я использовал функции «Helper '», такие как std :: to_array .

Код: Выделить всё

std::array{1, 2, 3}; // N is not deduced
std::to_array({1, 2, 3}); // N is deduced
Почему вычет аргументов ведет себя по -разному в этих разных контекстах?


Подробнее здесь: https://stackoverflow.com/questions/794 ... plates-com
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»