首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问模板特化与指针的引用的关系

2013-11-21 
请教模板特化与指针的引用的关系问两个简单的问题,请大神详解原因..#include iostream#include cstdlib

请教模板特化与指针的引用的关系
问两个简单的问题,请大神详解原因..


#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的例子,希望对你有用。

热点排行