我想編寫函數模板一樣如何檢測運算符[]是否適用於Type?
template< typename T >
void foo(T& obj){
obj[0] = xxxxxx;
}
其中T必須具有操作員[]適用。
T可以是任何類型的數組,std :: vector,std :: array或任何其他類型。所以,我不能用T作爲他們所有人的超類。我認爲這應該是在std::type_traits風格。
我想編寫函數模板一樣如何檢測運算符[]是否適用於Type?
template< typename T >
void foo(T& obj){
obj[0] = xxxxxx;
}
其中T必須具有操作員[]適用。
T可以是任何類型的數組,std :: vector,std :: array或任何其他類型。所以,我不能用T作爲他們所有人的超類。我認爲這應該是在std::type_traits風格。
template<class T>
using LvalueIndexable = decltype(std::declval<T&>()[1]);
template<class T, class U = void>
using RequiresLvalueIndexable
= typename std::enable_if<std::experimental::is_detected<LvalueIndexable, T>{},
U>::type;
template< typename T, typename = RequiresLvalueIndexable<T> >
void foo(T& obj){
obj[0] = xxxxxx;
}
查看cppreference page瞭解如何實施std::experimental::is_detected
。
出了什麼問題只是寫的代碼是什麼? –
沒有錯,但如果可能我想限制錯誤的類型。 – kyb
@kyb好吧,這些將被限制(除非你想排除純指針類型)。你想要更好的錯誤信息嗎? –