Частичный вывод параметров в классе шаблон (функция C ++ 17)

Моя идея о функции C ++ 17 Вывод параметров шаблона для классов шаблон состоял в том, что имелось намерение усреднять поведение функций шаблона и классы шаблон в случаях вывода параметров. Но я думаю, что есть что-то, что я не понял.

Если у нас есть этот объект шаблон:

template <std::size_t S, typename T>
struct test
{
    static constexpr auto size = S;
    using type_t = T;

    test(type_t (&input)[size]) : data(input) {}
    type_t (&data)[size]{};
};

Обычно я использую функцию помощи, чтобы облегчать создание объектов test:

template <std::size_t S, typename T>
test<S, T> helper(T (&input)[S]) { return input; }

Что может быть использованным следующего способа:

int main()
{
    int buffer[5];

    auto a = helper<5, int>(buffer); // Sin deduccion.
    auto b = helper<5>(buffer);      // Tipo deducido.
    auto c = helper(buffer);         // Tipo y tamanyo deducidos.

    std::cout << a.size << b.size << c.size;

    return 0;
}

Предыдущий код показывает 555 поскольку он состоял в том, чтобы ждать. Я протестировал то же самое в Wandbox используя составители больше nuevos1:

int main()
{
    int buffer[5];

    test<5, int> a(buffer); // Sin deduccion: Funciona.
    test<5> b(buffer);      // Tipo deducido: FALLO.
    test c(buffer);         // Tipo y tamanyo deducidos: Funciona.

    std::cout << a.size << b.size << c.size;

    return 0;
}

Кажется, что вывод параметров для классов шаблон только функционирует, когда приходят к заключению обо всех параметрах, он надеялся, что оба поведение (вывод из-за функции и из-за класса) равно: есть что-то, что он не понял бы?


1l-ые последние доступные составители в Wandbox - gcc HEAD 7.0.1 201701 и clang HEAD 5.0.0 (trunk).

8
задан 24.01.2017, 18:40
0 ответов

Las respuestas que se muestran является продолжением существования экстра la misma pregunta en SOen папа эль-кредо, записанный в порядке происхождения).

Ambas respuestas vienen a decir que en el propio Documento técnico no está claro que la deducción parcial de parámetros de plantilla en clases plantilla esté allowida y que deçésis por resultar confuso. Como podemos ver en los ejemplos de la pregunta la deducción total funciona.


Никол Болас

Происходит от противоречия между документами и принципами Deducción de parámetros de plantilla para clases plantilla ; В частности, в частности, в соответствии с указаниями debería estar allowida (подлинный исходный код, оригинальное разрешение): // Вводная таблица правильная и правильная форма файла! tuple t (42, "waldo", 2.0f);


1 Информационный бюллетень, посвященный обновлению авторского блога (Botond Ballo), посвященный созданию общеобразовательных программ, Оулу и июнь 2016 г. Эль-блог « Есть Уолдо! », «Все в порядке»

6
ответ дан 03.12.2019, 17:31