Как найти длину пакета параметра?

Предположим, что у меня есть шаблонная функция variadic как

template<typename... Args>
unsigned length(Args... args);

Как я нахожу длину списка параметров с помощью функции длины?

6
задан GManNickG 5 May 2010 в 03:56
поделиться

1 ответ

Используйте sizeof ... :

template<typename... Args>
constexpr std::size_t length(Args...)
{
    return sizeof...(Args);
}

Обратите внимание, что вы не должны использовать беззнаковый , но std :: size_t (определено в ). Кроме того, функция должна быть постоянным выражением.


Без использования sizeof ... :

namespace detail
{
    template<typename T>
    constexpr std::size_t length(void)
    {
        return 1; // length of 1 element
    }

    template<typename T, typename... Args>
    constexpr std::size_t length(void)
    {
        return 1 + length<Args...>(); // length of one element + rest
    }
}

template<typename... Args>
constexpr std::size_t length(Args...)
{
    return detail::length<Args...>(); // length of all elements
}

Обратите внимание, что все полностью не протестировано.

13
ответ дан 8 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: