Могу ли я использовать условие в псевдониме типа в C ++ 20? - PullRequest
1 голос
/ 12 апреля 2020

Поскольку C ++ расширяется, чтобы объединить обычные вычисления и вычисления типов, мне интересно, есть ли способ получить что-то подобное этой работе?

static const int x = 47;

using T = (x%2) ? int : double;

Я знаю, что могу использовать decltype в функции шаблона, которая возвращает различные типы, основанные на if constepr, но я хотел что-то короткое, как мой оригинальный пример.

template<auto i> auto determine_type(){
    if constexpr(i%2) {
        return int{};
    } else {
        return double{};
    }
}

примечание: я счастлив использовать C ++ 20

1 Ответ

2 голосов
/ 12 апреля 2020

Вы можете использовать:

using T = std::conditional_t<(i % 2), int, double>;

Для более сложных конструкций ваш подход имеет слишком много ограничений на тип - было бы лучше сделать это следующим образом:

template<auto i>
constexpr auto determine_type() {
    if constexpr (i%2) {
        return std::type_identity<int>{};
    } else {
        return std::type_identity<double>{};
    }
}

using T = /* no typename necessary */ decltype(determine_type<i>())::type;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...