如何判断两个变量在编译时是否具有相同的类型?

时间:2019-09-29 11:31:37

标签: c++ c++17

有没有比这更好的方法(或另一种方法)来判断两个变量在编译时是否具有相同的类型:

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

3 个答案:

答案 0 :(得分:1)

  

是否有更好的方法(或另一种方法)来判断两个变量是否具有   编译时的类型与此相同:

好吧,您可以使用辅助变量模板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)>);

答案 1 :(得分:0)

  

在编译时是否有更好的方法来判断两个变量是否具有相同类型?

不,std::is_same是必经之路。您当然可以将std::is_same_v用作@ L.F。发表评论,但这基本上是相同的哲学。

  

还有另一种方法来判断两个变量在编译时是否具有相同类型?

是的,如此answer所示。

答案 2 :(得分:0)

尚不完全清楚这里的实际问题是什么,但是确保两个变量具有相同类型的最简单方法是这样写:

{'A': [{'test_1': 90, 'test_2': 80, 'test_3': 95}], 'B': [{'test_1': 92, 'test_2': 75, 'test_3': 80}, {'test_1': 80, 'feature_2': 81, 'test_3': 82}]}

如果您是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的类型不同,则模板实例化将失败。