请问模板特化与指针的引用的关系
请教模板特化与指针的引用的关系
问两个简单的问题,请大神详解原因..
1.为什么tostr(c)不能识别特化版本?
2.为什么特化时一定要加&,模板定义时形参已经包含了&("const T &v"),但是在特化时不加&,直接写wchar_t*是报错的?
------解决方案--------------------
因为模板特化是不考虑类型转换的,静态类型识别是精确匹配的。
------解决方案--------------------
下面这段代码有问题:
请考虑d如何释放。
------解决方案--------------------
楼主现在还有困惑吗?
关于C++的模板编程在《C++标准程式库》中有很多,里面也有const和非const的例子,希望对你有用。
问两个简单的问题,请大神详解原因..
#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;//显式指定特化
}
1.为什么tostr(c)不能识别特化版本?
2.为什么特化时一定要加&,模板定义时形参已经包含了&("const T &v"),但是在特化时不加&,直接写wchar_t*是报错的?
------解决方案--------------------
因为模板特化是不考虑类型转换的,静态类型识别是精确匹配的。
------解决方案--------------------
下面这段代码有问题:
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;
}
请考虑d如何释放。
------解决方案--------------------
楼主现在还有困惑吗?
关于C++的模板编程在《C++标准程式库》中有很多,里面也有const和非const的例子,希望对你有用。