c语言有办法判断(比较)变量类型吗( 二 )


typedef enum{TID_int,TID_double,TID_char,//...}TypeId;typedef Typeid_ uint32_t;#define DEF_START(name) \\typedef struct name{\\Typeid typeid_ = TID_##name;\\#define DEF_END \\}//像这样用:DEF_START(SomeBody)int id;char name;DEF_END//获取类型id:SomeBody a;printf("%d",a.typeid_);在此之前还得填类型列表,很简陋,勉强用.虽然你知道这个类,但是你不知道这个类的名字,那么你就用数组存起来,但应该是只将类型列表写一次:
#define TYPE_TABLE(a,b) \\a TID_int b \\a TID_double b \\a TID_char b \\#define COMMA ,typedef enum{TYPE_TABLE( , COMMA )}Type_Id;#define YINHAO "char* Type_Id_Name = {TYPE_TABLE( YINHAO , YINHAO COMMA)}//再定义一下使用方法:#define get_type_name(value_name) \\Type_Id_Name//使用:Somebody sb;printf("%s",get_type_name(sb));瞎写的 别认真...
写到这写不下去了 因为没想到其他功能.
===========================
这么写不行:
#define YINHAO "char* Type_Id_Name = {TYPE_TABLE( YINHAO , YINHAO COMMA)}那写成这样:
#define DEF_STR(name) #name,#define ZK (#define YK )char* Type_Id_Name = {TYPE_TABLE( DEF_STR ZK , YK)}没跑过 不负责.

■网友
我说一下。我的做法。
我是在一个几年前做一个小工具的时候用的这个方法。我用的就是C语言,开发工具VS。
我设计了一个元数据层的DLL,里边封了一些函数,当然这些函数也是调用其它DLL中的函数。那也都是我写的,不是系统现成的。这其中一个功能就是类型判断。当时我做的功能比较简单,如果复杂一点就是容器。但我做得只是有点影子而已,因为这个不是我的目的,我是要做我那个工具。我说这些就是告诉你可以实现,只是比较复杂。不是利用C语言的本身编译判断,而是自己设计一个模块来实现。详细的情况我记不清了。反正因为一些原因那个小工具的主体功能没实现,只是这部分作为基础模块做出来调通了而已。现在要是再做我不会设计得那么差了。

■网友
也就是typeof/sizeof能用用,不过c只要关注地址和大小就行了。复杂对象就手动撸个虚表,封装一些基本元语就差不多了。
■网友
【c语言有办法判断(比较)变量类型吗】 不能,也不认为这样做有什么意义。
任何类型在内存中都是0101001010110010100101001010101010
你觉得能怎么判断?除非你再用另一个变量保存这个变量的类型
但这样有什么意义?况且这样也不能定义为“判断”了

■网友
cout 要么报错,要么是什么输出什么


推荐阅读