比较typedef是相同的类型
Compare typedef is same type
我正在使用c++(不是11)并使用一些对整数数据类型有不同类型定义的库。有什么方法可以断言两个类型是相同的类型吗?我自己想出了下面的解决办法。安全吗?由于
template<typename T>
struct TypeTest
{
static void Compare(const TypeTest& other) {}
};
typedef unsigned long long UINT64;
typedef unsigned long long UINT_64;
typedef unsigned int UINT_32;
int main()
{
TypeTest<UINT64>::Compare(TypeTest<UINT64>()); // pass
TypeTest<UINT64>::Compare(TypeTest<UINT_64>()); // pass
TypeTest<UINT64>::Compare(TypeTest<UINT_32>()); // fail
}
在c++ 11中,您可以使用std::is_same<T,U>::value
。
因为你没有c++ 11,你可以自己实现这个功能:
template<typename T, typename U>
struct is_same
{
static const bool value = false;
};
template<typename T>
struct is_same<T,T> //specialization
{
static const bool value = true;
};
完成了!
同样,您可以将static_assert
1实现为:
template<bool> struct static_assert;
template<> struct static_assert<true> {}; //specialization
现在你可以使用它们作为:
static_assert<is_same<UINT64,UINT64>::value>(); //pass
static_assert<is_same<UINT64,UINT32>::value>(); //fail
或者您可以将其封装在宏中:
#define STATIC_ASSERT(x) { static_assert<x> static_assert_failed; (void) static_assert_failed; }
则使用as:
STATIC_ASSERT(is_same<UINT64,UINT64>::value); //pass
STATIC_ASSERT(is_same<UINT64,UINT32>::value); //pass
如果您使用宏,那么如果断言失败,您将在编译器生成的消息中看到以下字符串:
static_assert_failed
是有用的。有了错误消息中的其他信息,您就可以找出失败的原因了。
希望对你有帮助。
<一口> 1。注意,在c++ 11中,static_assert
是一个操作符(在编译时操作),而不是一个类模板。在上面的代码中,static_assert
是一个类模板一口>
由于您没有c++ 11,所以请使用boost。
BOOST_STATIC_ASSERT(boost::is_same<T, U>::value);
你可以写一些你的断言函数,而不是BOOST_STATIC_ASSERT
。
std::type_info可能对您有所帮助。
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 从 Typedef 数据类型中删除常量
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 是否可以分别专注于 typedef 及其基础类型?
- 如何对绑定的成员方法进行typedef,然后将该类型用作模板参数
- 显式调用 typedef'd 类类型的析构函数的正式正确方法
- "typedef"类型名称是否可以像"struct"定义那样声明指向结构的指针?
- 具有未声明/未定义类型的 typedef 结构
- 使用 pybind11 绑定 typedef 类型的正确语法是什么?
- 通过 typedef 模板<类型名 T、T> 强制模板实例化 - 为什么有效?
- C和C 类型(TypeDEF)之间的差异
- 如何通过从变量中获取类型来访问内部 typedef
- C 通过Typedef定义新类型
- 使用#Define和Typedef与数据类型A一起使用
- typedef 类型不匹配,将其传递到函数中
- 如何使用函数签名的 typedef 作为 std::function 的类型参数
- 从 csv 文件中获取不同类型的数据,并将其放入 C++ 中的 typedef 结构中
- typedef 中的自定义类型为 Qt MetaType
- Swig 简单类型 typedef 参数