std::is_array
定義爲僅適用於類似於T[]
或T[N]
的類型。不包括std::array
。
根據標準,您不能修改或專用std::is_array
爲true_type
爲std::array
;那會讓你的程序不合格,不需要診斷。當std
中的類型專門化時,結果必須與標準一致,標準在此處具體說明。 (另外,對於std
內的其他模板這樣做非常有問題)。
您可以創建自己的is_array
特點:
namespace notstd {
template<class T>
struct is_array:std::is_array<T>{};
template<class T, std::size_t N>
struct is_array<std::array<T,N>>:std::true_type{};
// optional:
template<class T>
struct is_array<T const>:is_array<T>{};
template<class T>
struct is_array<T volatile>:is_array<T>{};
template<class T>
struct is_array<T volatile const>:is_array<T>{};
}
然後使用notstd::is_array<T>
其他地方的檢測無論是C風格的數組或C++ std::array
。
'std :: array'根本不是數組。他們只是稱它爲因爲它比'std :: array_wrapper'或'std :: better_array'更方便。 – user2357112
@ user2357112:由於'is_array <>'的含義是由定義'array <>'的相同語言的完全相同版本決定的,所以「數組不是數組」的概念看起來很荒謬,不是嗎? ? –
智能指針也不會傳遞'is_pointer'。 'std :: is_array'如果是特殊的'std :: array',將會不太有用,並且使得'std :: array'成爲一個真正的數組將首先使得'std :: array'失敗。只是不要讓名字混淆你。 – user2357112