0
/* 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);
4

2 回答 2

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)
    
于 2012-06-03T21:40:56.517 回答
0

(问题得到扩展后完全改变了答案)

问题是您搜索的值是 a const char *,但您搜索的数组是std::strings 的数组。(好吧,我希望您using std在代码中有所保留,并且您使用的是标准字符串而不是您自己的。)

您需要像这样调用它:

mybsearch(字符串(“桃子”),svals,slen)

于 2012-06-03T20:50:17.577 回答