我想编写像
这样的函数模板public function messages()
{
return [
'password.required' => 'The password field is required.',
'password_confirmation.required' => 'The password confirmation field is required.',
];
}
其中T必须适用operator [] T可以是任何类型的数组,std :: vector,std :: array或任何其他类型。所以,我不能使用T作为所有这些的超类。我认为它应该像std::type_traits样式。
答案 0 :(得分:3)
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
。
答案 1 :(得分:1)