/* Find an item in an array-like object
* @param val the val to search for
* @param arr an array-like object in which to search for the given value
* @param size the size of the array-like object
* @return the index of the val in the array if successful, -1 otherwise
*/
template < class T>
int mybsearch(T val, T const arr[], const int &size)
当我尝试使用const char *和一个字符串数组调用此模板函数时,编译器会抱怨...... mybsearch("peaches", svals, slen)
,我怎么能修改模板原型来适应这个?
这是字符串数组
string svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
const int slen = sizeof(svals)/sizeof(string);
答案 0 :(得分:2)
由于T
被推断为const char*
,因此您尝试使用const char* const[]
初始化string[]
。这不起作用(如果参数类型基本相同,则数组只能传递给函数 - 保存为限定符 - 作为参数类型)。
你可以
一致地使用C字符串,例如:
const char* svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
不推荐。
始终使用C ++字符串
mybsearch(string("peaches"), svals, slen)
将参数解耦为mybsearch(因此您可以搜索与数组类型不同的类型的元素,只要它们具有可比性)
template < class T, class U>
int mybsearch(T val, U const arr[], const int &size)
答案 1 :(得分:0)
(问题扩展后完全改变了答案)
问题是您搜索的值是const char *
,但您搜索的数组是std::string
的数组。 (好吧,我希望你在代码的某处有using std
,并且你使用的是标准字符串而不是你自己的字符串。)
您需要像这样调用它:
mybsearch(字符串(“桃子”),svals,slen)