Как обработать предупреждение анализа stati c из проверки Core Guidelines о gsl :: at? - PullRequest
1 голос
/ 21 февраля 2020

Я активировал анализ stati c для своего проекта в Visual Studio. Проверка основных рекомендаций говорит, что я должен использовать gsl :: at для подписки. Но мой код сохранить. Какой самый чистый способ избавиться от этого предупреждения? Должен ли я отключить это? Должен ли я написать свой код по-другому? Должен ли я использовать gsl :: при введении накладных расходов для проверки? Мой код:

template <typename T, size_t N>
void increase(T(&data)[N])
{
    for (size_t i = 0; i < N; ++i)
        data[i] +=1;
}

1 Ответ

0 голосов
/ 21 февраля 2020

Я нашел решение сам. Поскольку размер известен во время компиляции, можно использовать std :: array, std :: get и std :: index_sequence. std :: get приводит к ошибке компиляции, если индекс выходит за пределы. Больше не требуется проверка во время выполнения.

template <typename... Ts>
constexpr void noop(Ts...) noexcept {}

template <typename T, size_t N, size_t... I>
constexpr void increase(std::array<T, N>& data, std::index_sequence<I...>) noexcept
{
    noop((std::get<I>(data) += 1)...);
}

template <typename T, size_t N>
constexpr void increase(std::array<T, N>& data) noexcept
{
    increase(data, std::make_index_sequence<N>{});
}
...