2015-09-08 51 views
1

是否有C++來執行條件 static_assert 11條件static_assert

例如一種優雅的方式:

template <class T> 
class MyClass 
{ 
    COMPILE_TIME_IF(IsTypeBuiltin<T>::value) 
     static_assert(std::is_floating_point<T>::value, "must be floating pt"); 
}; 
+2

你有沒有考慮過使用&&操作符還是這不是一個可行的選擇? –

+0

&&會工作,也許我應該將這個問題改爲基於類型 – bendervader

+1

@bendervader'std :: is_integral '和'std :: is_floating_point '的'編譯時間'是排他性的。你想實現什麼? – Biffen

回答

5

static_assert()簡單的布爾邏輯應該這樣做:

static_assert(
    (!std::is_fundamental<T>::value) 
    || std::is_floating_point<T>::value, 
    "must be floating pt" 
); 

Ie T而不是基本或它的浮點數。換句話說:如果T的基礎,它也必須是浮點數。