7

次のような可変個引数テンプレート関数があるとします。

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

長さ関数を使用してパラメータリストの長さを見つけるにはどうすればよいですか?

4

1 に答える 1

17

使用sizeof...

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

を使用するべきではないことに注意してくださいunsignedが、std::size_t(で定義されてい<cstddef>ます)。また、関数は定数式である必要があります。


使用せずに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
}

すべてが完全にテストされていないことに注意してください。

于 2010-05-05T03:50:14.860 に答える