总之,我希望能够检查对象的类型是否与某种类型匹配,或者两个对象是否匹配类型。
我想要做的事情的实质如下:
#include <vector>
#include <iostream>
#include <type_traits>
template< class T1, class T2 >
bool compare_types(T1, T2)
{
return std::is_same<T1, T2>::value;
}
class OBJ
{
};
int main(int argc, char *argv[])
{
OBJ a;
OBJ b;
int c;
std::cout<<"\n"<<compare_types(a, b)<<"\n"; // ok and returns true
//std::cout<<"\n"<<compare_types(c, int)<<"\n"; // compile error, ideally return true
//std::cout<<"\n"<<std::is_same<c, int>::value<<"\n"; // compile error, ideally return trues
//std::cout<<"\n"<<compare_types(a, OBJ)<<"\n"; // compile error, ideally return true
//std::cout<<"\n"<<std::is_same<a, OBJ>::value<<"\n"; // compile error, ideally return true
//std::cout<<"\n"<<compare_types(a, std::vector)<<"\n"; // compile error, ideally return false
//std::cout<<"\n"<<std::is_same<a, b>::value<<"\n"; // compile error, ideally return true
//std::cout<<"\n"<<std::is_same<a, c>::value<<"\n"; // compile error, ideally return false
//std::cout<<"\n"<<std::is_same<int, float>::value<<"\n"; // compile error, ideally return false
std::cout<<"\n"<<std::is_same<int, std::int32_t>::value<<"\n"; // ok and returns true
return 0;
}发布于 2022-01-03 18:09:34
int不是一个实例。这是一种类型。因此,您需要将int的一个实例传递给您的compare_types
std::cout << compare_types(c, int{}) << '\n';以及使用c作为模板参数时的类型。幸运的是,decltype(c)提供了以下类型:
std::cout << std::is_same<decltype(c), int>::value << '\n';如果继续这种模式,您的程序就会看起来像:
#include <iostream>
#include <type_traits>
#include <vector>
template<class T1, class T2>
bool compare_types(T1, T2) {
return std::is_same<T1, T2>::value;
}
class OBJ {};
int main(int argc, char* argv[]) {
OBJ a;
OBJ b;
int c;
std::cout << compare_types(a, b) << '\n'
<< compare_types(c, int{}) << '\n'
<< std::is_same<decltype(c), int>::value << '\n'
<< compare_types(a, OBJ{}) << '\n'
<< std::is_same<decltype(a), OBJ>::value << '\n'
<< std::is_same<decltype(a), decltype(b)>::value << '\n'
<< std::is_same<decltype(a), decltype(c)>::value << '\n'
<< std::is_same<int, float>::value << '\n'
<< std::is_same<int, std::int32_t>::value << '\n';
// std::cout << compare_types(a, std::vector) << '\n';
}我不知道你对std::vector的期望是什么。它本身并不是一种类型。它是一个模板,因此它至少需要一个模板参数(或者在C++17和更高版本中,这使得推断T成为可能)。
https://stackoverflow.com/questions/70569670
复制相似问题