Как определить, имеют ли две переменные одинаковый тип во время компиляции? - PullRequest
1 голос
/ 29 сентября 2019

Есть ли лучший способ (или другой способ) определить, имеют ли две переменные один и тот же тип во время компиляции, чем этот:

auto var1 = ..;
auto var2 = ..;
static_assert(std::is_same<decltype(var1), decltype(var2)>::value);

Ответы [ 3 ]

1 голос
/ 29 сентября 2019

Есть ли лучший способ (или другой способ) определить, имеют ли две переменные один и тот же тип во время компиляции, чем этот:

Хорошо, вы можете использовать шаблон вспомогательных переменных std::is_same_v

template< class T, class U >
inline constexpr bool is_same_v = is_same<T, U>::value;

тогда оно станет

static_assert(std::is_same_v<decltype(var1), decltype(var2)>);
0 голосов
/ 29 сентября 2019

Не совсем понятно, в чем здесь реальная проблема, но самый простой способ убедиться, что две переменные имеют одинаковый тип, - написать их так:

int var1 = /* whatever */;
int var2 = /* whatever */; // var1 and var2 have the same type

, если вы фанатauto вместо написания фактического типа, вы можете написать код, который просто определяет вторую переменную того же типа, что и первая:

auto var1 = /* whatever */;
decltype(var1) var2 = /* whatever */; // var1 and var2 have the same type

другая возможность - написать функцию-шаблон, которая принимает два аргументатого же типа:

template <class Ty> void f(Ty var1, Ty var2) { /* do something */ }
f(var1_expression, var2_expression);

, если типы var1_expression и var2_expression не совпадают, создание шаблона завершится неудачей.

0 голосов
/ 29 сентября 2019

Есть ли лучший способ определить, имеют ли две переменные одинаковый тип во время компиляции?

Нет, std::is_same - это путь.Вы можете использовать, конечно, std::is_same_v, как прокомментировал @LF, но это в основном та же философия.

Есть ли другой способ определить, имеют ли две переменные один и тот же тип во время компиляции?

Да, как показано в этом ответе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...