Как я могу mimi c передать std :: pair в качестве аргумента шаблона функции в C ++ 17? - PullRequest
0 голосов
/ 23 февраля 2020

Ранее я задавал вопрос об оценке функции, получающей std :: pair во время компиляции:

Почему я могу оценить функцию, получающую std :: pair во время компиляции, но не утверждать это?

И кажется, что это невозможно с C ++ 17, но это будет возможно с C ++ 20. Теперь я смотрю, есть ли способ, чтобы mimi c передать std :: pair в функцию? В идеале я бы не использовал пакет параметров, потому что я хочу дать понять пользователю, что значения идут парами.

1 Ответ

1 голос
/ 23 февраля 2020

Да, это возможно. Просто создайте пару времени компиляции тип:

template <auto First, auto Second>
struct pair
{
    static constexpr auto first = First;
    static constexpr auto second = Second;
};

Наше создание кортежей внезапно становится чище:

template<typename... Pairs>
constexpr auto foo() noexcept
{
    static_assert(((Pairs::second - Pairs::first >= 0) && ...));
    return std::tuple((Pairs::second - Pairs::first)...);
}

Здесь - это полное пример.

...