[問題] C++ 自定義轉型
在拆解 MFC - CWnd 時有看到這段
CWnd::operator HWND()
{
return this->m_hwnd;
}
CWnd cwnd;
HWND hwmd = (HWND)cwnd;
後來查一下,是在用傳統 C-stype 的轉型,最後一行變成
hwnd = cwnd.operator HWND () ;
不過這種 implement 我實作問題很大
class String{
size_t m_size;
char * m_heap;
public:
String(const size_t size = 10) : m_size(size) {
m_heap = new char[size];
}
~String() {delete [] m_heap;}
void set(const char* str){strcpy(m_heap, str);}
char* operator char * () const { /* error 1, 2*/
return m_heap; /* error 3 */
}
};
String s(100);
s.set("edisonx");
char * ptr = (char*)s;
cout << ptr << endl;
出現的錯誤訊息都讓我不知如何下手,特別是第三點覺得莫名奇妙。
(1) 使用者定義轉換不可以指定傳回型別
(2) 不正確的使用者定義轉換語法 : 間接取值不合法
(3) 'return' : 無法由 'char *const ' 轉換為 'char **'
另外在寫 template 時也是類似的問題 ,不過又多了一個。
template<typename T>
class Point{
T m_x, m_y;
public:
...
template<typename U> /* error1 error2 error3 */
Point<U> operator Point<U> () const {
return Point<U> ( static_cast<U>(m_x) , static_cast<U>(m_y) );
}
};
Point<double> t1;
Point<int> t2;
t2 = ( Point<int> )t1;
不過這次錯誤不一樣了,error1~error3 是同一行、同一訊息
(1) (2) (3) 使用者定義轉換不可以指定傳回型別
最後再請教 2 個問題。
1. Point<T>::operator <U> () 有沒有辦法拆到 class 外面寫?
2. operator static_cast 是不是不要複載較佳? ( 雖然我覺得我在做一樣的事.. )
謝謝各位不吝指教。
--
「自從我學了 C# , 人都變聰明 , 考試都考一百分」
「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」
「自從我學了 Java , 明顯變壯 , 個子也變高了 」
「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.161
推
06/12 07:52, , 1F
06/12 07:52, 1F
→
06/12 07:54, , 2F
06/12 07:54, 2F
推
06/12 07:56, , 3F
06/12 07:56, 3F
→
06/12 07:57, , 4F
06/12 07:57, 4F
→
06/12 07:58, , 5F
06/12 07:58, 5F
→
06/12 08:11, , 6F
06/12 08:11, 6F
→
06/12 08:11, , 7F
06/12 08:11, 7F
→
06/12 08:13, , 8F
06/12 08:13, 8F
推
06/12 12:34, , 9F
06/12 12:34, 9F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章