情况:
typedef int TypeA;
typedef int TypeB;
我需要使TypeA与TypeB不兼容(因此任何将TypeA分配给TypeB的尝试都会触发编译错误),同时保留内置类型(运算符)提供的所有功能。
一种方法是将每种类型包装到单独的结构/类中(并重新定义所有运算符等)。
还有其他更优雅的方法吗?
不允许使用第三方库。不支持C ++ 0x / C ++ 11x。 (支持C ++ 2003)
答案 0 :(得分:4)
唯一的方法是创建一个新类型(例如使用BOOST_STRONG_TYPEDEF)。
答案 1 :(得分:0)
要触发编译器错误,您可以将这两种类型作为类。在TypeA
中,创建转化为/ TypeB
的转化运算符和/或构造函数 - 并使这些方法私有。
这样,从TypeB
到TypeA
的任何转换都会调用转换函数,编译器会发出该方法为私有的错误!确保您可能需要编写一些转换运算符/构造函数,以便成功实现转换。我的意思是,如果你想从float
进行转换,你需要编写构造函数float
,等等其他类型。
您可以在TypeA
或TypeB
中编写转换运算符,构造函数,以及这些类中允许的转换列表。