C++17中如何使用变量模板比较变量类型?
How to use variable templates to compare the types of variables in C++ 17?
我有一段漂亮的代码,它使用 C++14s variable templates:
#include <typeinfo>
template<typename T, typename U>
constexpr bool same_type = false;
template<typename T>
constexpr bool same_type<T,T> = true;
int main() {
bool f = same_type<int, bool>; // compiles. Evals to false.
bool t = same_type<int, int>; // compiles. Evals to true.
int a;
int b;
return same_type<typeid(a), typeid(a)>; // does not compile.
}
它检查两种类型是否相同。我喜欢这样,但如果我必须自己传递类型而不是从一些变量中派生它们,这对我来说似乎毫无用处。
有没有办法让它工作?我原以为 typeid(x)
之类的东西可能会成功。
same_type<decltype(a), decltype(a)>
.
请注意,标准库已经具有此功能,称为 std::is_same_v<...>
。
我有一段漂亮的代码,它使用 C++14s variable templates:
#include <typeinfo>
template<typename T, typename U>
constexpr bool same_type = false;
template<typename T>
constexpr bool same_type<T,T> = true;
int main() {
bool f = same_type<int, bool>; // compiles. Evals to false.
bool t = same_type<int, int>; // compiles. Evals to true.
int a;
int b;
return same_type<typeid(a), typeid(a)>; // does not compile.
}
它检查两种类型是否相同。我喜欢这样,但如果我必须自己传递类型而不是从一些变量中派生它们,这对我来说似乎毫无用处。
有没有办法让它工作?我原以为 typeid(x)
之类的东西可能会成功。
same_type<decltype(a), decltype(a)>
.
请注意,标准库已经具有此功能,称为 std::is_same_v<...>
。