C++ C++;错误:推断出参数'的冲突类型;T';字符串与常量字符*

C++ C++;错误:推断出参数'的冲突类型;T';字符串与常量字符*,c++,string,templates,c++11,char,C++,String,Templates,C++11,Char,因此,我正在为deque容器编写一个简单的模板化搜索函数。代码如下: template <typename T> void searchInDequeFor(std::deque<T> Deque, T searchValue) { for(const auto & element : Deque) { if(Deque.empty()) {

因此,我正在为deque容器编写一个简单的模板化搜索函数。代码如下:

    template <typename T>
    void searchInDequeFor(std::deque<T> Deque, T searchValue)
    {
        for(const auto & element : Deque)
        {
            if(Deque.empty())
            {
                std::cout << "Deque is empty, nothing to search for..." << "\n";
            }
            else if(element==searchValue)
            {
                std::cout << searchValue << " matches " << element << ", an element in the deque" << "\n";
            }
        }
    }
模板
void searchInDequeFor(std::deque deque,T searchValue)
{
用于(常量自动和元素:Deque)
{
if(Deque.empty())
{

std::cout好的,
std::string
const char*
(要修复函数以允许隐式转换,请确保只从第一个参数推导
T
,而不是从第二个参数推导

template <typename T>
struct identity { typedef T type; };

template <typename T>
void searchInDequeFor(std::deque<T> Deque, typename identity<T>::type searchValue)
模板
结构标识{typedef T type;};
模板
void searchInDequeFor(std::deque deque,typename identity::type searchValue)

这样,当您传入一个
std::deque
和一个
const char*
时,编译器将只能使用第一个参数来确定要使用哪个
T
。只有在
T
被固定为
std::string
后,第二个参数的类型才能解析为
std::string
,这是将允许从
const char*

进行隐式转换这非常好!谢谢!
candidate template ignored: deduced conflicting types for parameter 'T' ('std::__1::basic_string<char>' vs. 'const char *')
searchInDequeFor(myDeque,std::string("pear"));
template <typename T>
struct identity { typedef T type; };

template <typename T>
void searchInDequeFor(std::deque<T> Deque, typename identity<T>::type searchValue)