operator HANDLE () { return _handle; }怎么理解
operator HANDLE () { return _handle; }如何理解?
class Event{
operator HANDLE () { return _handle; }//如何理解?
private:
HANDLE _handle;
};
主要是:
operator HANDLE ()
是运算符重载吗?
如此重载后,程序中如何使用?
------解决方案--------------------
隐式类型转换。
CBitmap,CDC...等MFC都有这种转换,某种程度上提供一定便利。
参见more effective C++中某条款之利弊。
------解决方案--------------------
是
class Event{
operator HANDLE () { return _handle; }//如何理解?
private:
HANDLE _handle;
};
主要是:
operator HANDLE ()
是运算符重载吗?
如此重载后,程序中如何使用?
------解决方案--------------------
隐式类型转换。
CBitmap,CDC...等MFC都有这种转换,某种程度上提供一定便利。
参见more effective C++中某条款之利弊。
------解决方案--------------------
是
- C/C++ code
Event evt; HANDLE h = evt; printf("%d", (HANDLE)evt)
------解决方案--------------------
自动类型转换
假设你有一个class A,现在你有一个实例a=A()
在某些时候,你希望a能自动变动布尔型,那在类A里就应该这样:
class A
{
public:
operator bool () const { return true/false accordingly; }
}
其它类型同理
------解决方案--------------------
这就是一种类型转换,
如果楼主你使用过CString,你就会发现CString对象可以传入LPCTSTR为参数的函数中.
比如有个函数是这样的: OpenFile(LPCTSTR strFileName);
你会发现可以直接传入CString对象进去.
比如:
CString strName=TEXT("c:\\a.txt");
直接使用;
OpenFile(strName);这样就可以.而不需要把CString先转换成TCHAR buf[];
这就是因为CString有这个operator TCHAR*()的方法.
可以再举个简单例子:
比如有函数:
int addOne(int a)
{
a++;
return a;
}
class Int
{
public:
int m_val;
};
哪果没有 operator int(){return m_val;}
Int val;
你调用 addOne的时候就得
addOne(val.m_val);
如果有了operator int(){return m_val;}
你就可以直接这样调用函数:
addOne(val);