2011-02-23 100 views
7

如何让g ++在typedefs上进行类型检查?可能吗?即typedef类型检查?

typedef int T1; 
typedef int T2; 

T1 x = 5;  //Ok with me 
T2 y = x;  //Any way to get an error or a warning here? 

我不能使用C++ 0x特性的(我不知道他们是否能够做到这一点。)

编辑:我想是这样的:

typedef int BallID; 
typedef int BatID; 

BatID x = 10; 
map<BatID, Bat*> m; 
m.insert(make_pair(x, bigbat));  //OK 
BallID y = 15; 
m.insert(make_pair(y, smallbat));  //Give me a warning at least plz 

这太难问了吗?

+0

我几乎可以肯定,这是一个DUP,但我无法找到原来的。 – 2011-02-23 18:11:13

+0

没有'typedef',尽管它的名字,没有定义一个新的类型,它只是为现有的类型创建一个别名。 – sbi 2011-02-23 18:19:03

回答

8
+0

+1指出一个我还不知道的有用的Boost库 – 2011-02-23 18:14:02

+0

谢谢。由于约束条件我不能使用boost本身,但是我会在我的代码中复制粘贴文件,但是' typedef似乎很愚蠢现在给我。表达关于类型的想法是没有用的吗? – nakiya 2011-02-23 18:26:34

+0

@nakiya通常你只是想为一个类型创建一个新的名字。例如标准容器的特定实例,但不需要创建一个完整的新类型,因为'typedef'名称严格地是为了方便和可维护性。 – 2011-02-23 18:29:12

1

只要T1T2是相同类型的typedef,你将不会得到任何警告!

+0

但这只是没用。 :( – nakiya 2011-02-23 18:04:32

+1

不,你不会得到一个警告!至少我的g ++没有。 – karlphillip 2011-02-23 18:07:53

+0

@karlphillip:看到这个主题:[警告:在隐式常量转换溢出](http://stackoverflow.com/questions/5095434 /警告溢出隐式常数转换) – Nawaz 2011-02-23 18:38:20

2

要在谢里夫的回答展开:当你typedef A B,则B只是为A别名,不是一个独立的类型。在你的例子中,xy只是int

如果要创建新类型,请使用一个成员struct