C++ const char*作为模板的参数
(问题扩展后答案完全改变) 问题是您搜索的值是一个C++ const char*作为模板的参数,c++,templates,C++,Templates,(问题扩展后答案完全改变) 问题是您搜索的值是一个const char*,但您搜索的数组是一个std::strings的数组。(好吧,我希望您在代码的某个地方使用了std,并且您使用的是标准字符串,而不是您自己的字符串。) 您需要像这样调用它: mybsearch(string(“peaches”),svals,slen)因为T被推断为const char*,所以您试图用string[]初始化const char*const[]。这是行不通的(数组只能在参数类型与参数类型基本相同的情况下传递给函
const char*
,但您搜索的数组是一个std::string
s的数组。(好吧,我希望您在代码的某个地方使用了std,并且您使用的是标准字符串,而不是您自己的字符串。)
您需要像这样调用它:
mybsearch(string(“peaches”),svals,slen)因为
T
被推断为const char*
,所以您试图用string[]初始化const char*const[]
。这是行不通的(数组只能在参数类型与参数类型基本相同的情况下传递给函数,除了限定符)
你也可以
- 一致使用C字符串,例如:
string svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
const int slen = sizeof(svals)/sizeof(string);
不推荐
使用C++字符串一致< /P>
const char* svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
- 将参数与mybsearch解耦(这样您就可以搜索不同于数组类型的元素,只要它们是可比较的)
模板
int myb搜索(T val,U const arr[],const int&size)
现在这个怎么样?编译器似乎抱怨const char*与字符串类型不匹配,这是错误的;在C++中没有常数引用类型,而 const >,当放置在一个类型的中间时,应用于站在左边的东西。@ JPaleCeOOP,你是对的,我把它与<代码> char和const >混合起来。将编辑或删除。谢谢。模板毕竟是正确的,但是调用不是。编译器抱怨什么?请发布错误消息。错误消息是?还有第四个选项:在调用时将T
的类型显式指定为string
:mybsearch(“peaches”、svals、slen)
。编译器将使用适当的构造函数自动将“peaches”
转换为字符串。但是,请注意,将T
指定为const char*
将不起作用,因为没有从string
到const char*
的隐式转换,更不用说字符串数组了。我已经尝试通过像“U&arr”这样的引用传递数组来解耦参数。我还尝试将arr中的项类型转换为T类型,如“T temp=(T)arr[0]”,现在我尝试将“const char*”转换为字符串。
const char* svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
mybsearch(string("peaches"), svals, slen)
template < class T, class U>
int mybsearch(T val, U const arr[], const int &size)