0
正如我的previous question我想建立一個條件來檢查兩種類型檢查是否應該dynamic_cast
或不。 我以下條件:爲什麼這些條件不適用於模板類型?
#define can_dynamic_cast(FROM, TO) \
can_cast(FROM, TO) && \
!std::is_same<FROM, TO>::value && \
std::is_class<TO>::value && \
!std::is_const<FROM>::value && \
std::is_base_of<TO, FROM>::value
它不低於基本檢查工作,can_dynamic_cast
將返回true!
static_assert(!can_dynamic_cast(int, int), "didn't expecting dynamic cast, but could!")
出於絕望,我回到了低於條件,但仍然沒有希望!
#define can_dynamic_cast(FROM, TO) \
std::is_convertible<FROM, TO>::value && \
std::is_class<TO>::value && \
std::is_class<FROM>::value
上述條件是最基本的條件,can_dynamic_cast
將再次返回true
爲(int, int)
,這不是假設!
問題
1)我什麼都沒有錯?
嘗試手動擴展您的宏。提示:'!'沒有被應用到整個表達式。 – 2015-03-31 17:44:04
@Brian但是目標類型必須是一個指向/完整類類型的指針或引用,或者指向cv void的指針。 – 2015-03-31 17:45:16
@ T.C。哎呀,你是對的。我錯過了。 – Brian 2015-03-31 17:47:40