沒有拋出異常......的dynamic_cast基於這個答案,因爲預期
...我寫了這個代碼:
static TVALUE getUpperBound()
{
SomeStruct<TVALUE>* t;
try
{
dynamic_cast<SomeStruct<bool>*> (t);
return 1;
}
catch (int e)
{
}
try
{
dynamic_cast<SomeStruct<unsigned char>*> (t);
return 255;
}
catch (int e)
{
}
try
{
dynamic_cast<SomeStruct<unsigned int>*> (t);
return 65535;
}
catch (int e)
{
}
return 0;
}
但它不工作: -/
我知道有其他方法可以做到這一點(使用includes),但我需要得到t他的技術工作。
我不能在我的代碼中包含任何包含內容(這是一個很長的故事,但我根本不能)......因此,這種嘗試可以通過climits或typeinfo輕鬆完成。
任何人都可以向我解釋爲什麼這不起作用?
編輯1:
謝謝你們。我錯過了參考VS指針位。
這現在工作:
template <typename TVALUE>
TVALUE getUpperBound()
{
SomeStruct<TVALUE>* t;
if (dynamic_cast<SomeStruct<bool>*> (t) != nullptr)
return 1;
if (dynamic_cast<SomeStruct<unsigned char>*> (t) != nullptr)
return 255;
if (dynamic_cast<SomeStruct<unsigned int>*> (t) != nullptr)
return 65535;
return 0;
}
編輯2:
我試圖@StilesCrisis建議和使用模板特
template <typename TVALUE>
TVALUE getUpperBound();
template <>
bool getUpperBound<bool>()
{
return 1;
}
template <>
unsigned char getUpperBound<unsigned char>()
{
return 255;
}
template <>
unsigned int getUpperBound<unsigned int>()
{
return 65535;
}
作品的魅力。更好的實施。謝謝!
這將拋出一個exeption時,你會使用轉換爲引用類型,但你正在使用指針。仔細閱讀文檔 – grisha 2014-09-20 19:26:24
@ user2451677:你爲什麼寫評論的答案? – 2014-09-20 19:26:59
我沒有時間寫更詳細的答案 – grisha 2014-09-20 19:30:03