typedef过的相同类型不同名字不能重载???
typedef void* HGDIOBJ;//windows中实际类型就是这样的
KBitmap(HBITMAP hBitmap):m_hBitmap(hBitmap){}
KBitmap(HGDIOBJ hGdiObject):m_hBitmap((HBITMAP)hGdiObject){}
以上为KBitmap的2个构造函数,VC能正常编译通过,而bds2006提示2个声明
ambiguous,当然我知道HBITMAP和HGDIOBJ都是void*类型,但是也是用typedef重新申明过的啊,设置什么选项能让bds2006通过编译呢?
相关推荐
深度探究C++中的函数重载的用法
主要介绍了C++中的函数重载用法,包括重载时参数类型的差异以及匹配和转换等方面问题的讲解,需要的朋友可以参考下
typedef的用法.pdf
typedef的用法 在C语言中,typedef关键字用于为已存在的数据类型创建一个新的名称。通过typedef,我们可以为复杂的数据类型(如结构体、指针、函数等)定义简单的名字,方便我们在代码中引用。 以下是一个typedef的基本用法示例: typedef int myInt; // 创建一个名为myInt的新名称,它代表int类型 myInt a = 5; // 定义一个myInt类型的变量a,并赋值为5 在这个例子中,我们首先使用typedef为int类型定义了一个新的名称myInt。然后,我们就可以使用myInt这个新的数据类型来定义变量了。 typedef还可以用于定义复杂的数据类型,例如结构体和指针。下面是一个结构体和指针的例子:
下标操作符重载模拟多维数组详解
虽然不能直接实现一对下标操作符重载,但是我们可以间接模拟。思路是这样的,先通过单下标操作返回一个具有下标操作能力的左值,对左值进行下标操作,两个下标操作表达式联立就实现了双下标操作
EDA/PLD中的ISO C++基本类型和变量
基本类型和变量. 像其他高级语言一样,ISO C++除了像C一样,有自己的基本类型:字符型,整形,浮点型等,还提供了可用于自定义类型机制.所谓的C++ STL,正是这个机制定义了大量的类型和操作. 比如可变长的string,vector等.一般和C一样,也是为了兼容C,内置类型一般小写. 对于所谓内置类型不同,一般指位数不同而已,比如int 16(当然这个有争议,很多语言都是32位,所以C++又定义了一个long 32)和float(32位),当然也有不同的类型位数一样,比如刚才int 和 short都是16. 其实所有的这一切都是编译器想怎么解释就怎么解释(也有标准的
在C++中侦测内嵌型别的存在.doc
在C++中侦测内嵌型别的存在 动机(Motivation) 假设一所大学的注册系统提供了一个注册函数: template void Register(T person) { Register(person,typename T::person_tag()); }; 而对于注册者有以下几种标识: struct student_tag{}; struct teacher_tag{}; 还有Register的几个供内部使用的重载版本: template void Register(T p,student_tag){...} //注册学生 template void Register(T p,teacher_tag){...} //注册教师 并规定学生类一定要在内部typedef student_tag person_tag ;教师类typedef teacher_tag person_tag ;这样,当传给起初的那个Register的对象为学生类对象时,typename T::person_tag()其实构造了一个student_tag对象,从而激发函数重载,调用Register内部版本的template void Register(T p,student_tag);版本。其他情况亦均有对应。这是泛型编程里的常用手法,STL里屡见不鲜。 问题是,现在学校里假如不止学生教师,还有工人,警卫等其它人员。如果他们不会在类内部typedef任何东西,则Register需要一种机制以确定T内部是否typedef了某个标识符(例如person_tag)。如果没有,就默认处理。如果有,则再进行更详细的分类。


