一種隨機問題...任何只能用類操作符投射的方法?
我在尋找的是一種方法來表達一個強制轉換操作,該轉換操作使用我正在強制轉換的類實例的已定義操作符,並生成編譯時錯誤如果該類型沒有定義的演員操作符。因此,例如,我正在尋找的是這樣的:
template< typename RESULT_TYPE, typename INPUT_TYPE >
RESULT_TYPE operator_cast(const INPUT_TYPE& tValue)
{
return tValue.operator RESULT_TYPE();
}
// Should work...
CString sString;
LPCTSTR pcszString = operator_cast<LPCTSTR>(sString);
// Should fail...
int iValue = 42;
DWORD dwValue = operator_cast<DWORD>(iValue);
有趣的邊注:上面的代碼崩潰的VS2005 C++編譯器,以及不正確的VS2008 C++編譯器,由於編譯什麼我猜測是一個編譯器錯誤,但希望能夠證明這個想法。
任何人知道的任何方式來達到這種效果?
編輯:更多的理由,解釋爲什麼你會用這個。假設你有一個封裝類,它應該封裝或抽象一個類型,並且將它轉換爲封裝類型。你可以使用static_cast <>,但是當你想讓它失敗的時候它可能會工作(例如:編譯器選擇一個允許轉換爲你要求的類型的運算符,當你想要失敗時,因爲該運算符不存在)。
誠然這是一個罕見的情況,但是這很煩人,我不能表達正是我想要的編譯器中封裝的功能做......因此,這裏的問題。
是的,但是如果轉換爲內置的內部類型,我無法添加顯式構造函數或修改轉換行爲,那麼如何轉換? – Nick 2008-10-16 20:21:06
你的意思是你想改變兩種內在類型之間的默認轉換行爲? – 2008-10-16 20:38:22
不,我從包裝類轉換爲內在類型,所以我不能告訴編譯器我希望內在類型只能被明確地構造(並且在一般意義上也是不好的)。 – Nick 2008-10-16 21:54:48