请教模板特化与指针的引用的关系
问两个简单的问题,请大神详解原因..
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <cstring>
using namespace std;
//toString
template<typename T> std::string tostr(const T &v)
{
std::stringstream ss;
ss<<v;
return ss.str();
}
template<>
std::string tostr<const wchar_t* &>(const wchar_t* &v)
{
std::size_t size=wcslen(v)*2+1;
char* d=new char[size];
std::wcstombs(d,v,size);
return d;
}
int main()
{
//用以支持宽字符显示
std::ios::sync_with_stdio(false); // Linux gcc.
std::locale::global(std::locale(""));
std::setlocale(LC_CTYPE, ""); // MinGW gcc.
std::wcout.imbue(std::locale(""));
const wchar_t *c=L"天天ad";
cout<<tostr(c)<<endl;//不能识别特化
cout<<tostr<const wchar_t* &>(c)<<endl;//显式指定特化
}
template<>?
std::string?tostr<const?wchar_t*?&>(const?wchar_t*?&v)
{
????std::size_t?size=wcslen(v)*2+1;
????char*?d=new?char[size];
???????std::wcstombs(d,v,size);
????return?d;
}?