C++template expression的问题

作者:用户 来源:互联网 浏览:290 次 时间:2016-02-04 13:38:45

template

C++template expression的问题 - 摘要: C++templateexpression的问题#include<iostream>usingnamespacestd;template<typenameTintsize>cl

问题描述

C++template expression的问题
 #include<iostream> using namespace std; template <typename Tint size>class Buffer{ private:    T b_array[size]; public:    T* getBuffer(){        return b_array;    }    T& operator [](int index){        return b_array[index];    }    void bprint(){        cout<<getBuffer()<<endl;    } }; //为什么void Buffer<char4>::bprint(){...}就可以? template<int size> void Buffer<char size>::bprint(){    cout << ""Special input:"" << getBuffer(); } template<int size> void Buffer<int size>::bprint(){    for (int i = 0; i < size; i++){        cout << b_array[i] << "" "";    } } int main(){    Buffer<char5> buffer;    strcpy(buffer.getBuffer()Hello"");    buffer.bprint();    cout << endl;    Buffer<int 4> buffer2;    for (int i = 0; i < 4; i++){        buffer2[i] = i + 1;    }    buffer2.bprint();    getchar();    getchar(); }

为什么会出现这样的错误:
Error 6 error C2333: 'Buffer::bprint' : error in function declaration; skipping function body f:workc++visual studio 2013exam_reviewexam_reviewtemplate.cpp 18 1 Exam_review
Error 7 error C2333: 'Buffer::bprint' : error in function declaration; skipping function body f:workc++visual studio 2013exam_reviewexam_reviewtemplate.cpp 18 1 Exam_review
Error 4 error C2976: 'Buffer' : too few template arguments f:workc++visual studio 2013exam_reviewexam_reviewtemplate.cpp 30 1 Exam_review
Error 2 error C2995: 'void Buffer::bprint(void)' : function template has already been defined f:workc++visual studio 2013exam_reviewexam_reviewtemplate.cpp 30 1 Exam_review
Error 3 error C3855: 'Buffer': template parameter 'T' is incompatible with the declaration f:workc++visual studio 2013exam_reviewexam_reviewtemplate.cpp 30 1 Exam_review
Error 1 error C3860: template argument list following class template name must list parameters in the order used in template parameter list f:workc++visual studio 2013exam_reviewexam_reviewtemplate.cpp 30 1 Exam_review
Error 5 error C3860: template argument list following class template name must list parameters in the order used in template parameter list f:workc++visual studio 2013exam_reviewexam_reviewtemplate.cpp 37 1 Exam_review

解决方案

已经解决了这个问题,问题在于:
只能特化类,不能特化模板类中的函数。
所谓特化就是把模板中的类型具体化,特化的syntax是这样的:
template <...>
...

所以在我的代码中

//这里是在特化模板类中函数 不被允许 template<int size> void Buffer<char size>::bprint(){    cout << ""Special input:"" << getBuffer(); }

而这样是可以的

//这里不是在特化,因为没有template<...>... void Buffer<char4>::bprint(){    cout << ""Special input:"" << getBuffer(); }
解决方案二:

template
void Buffer::bprint(){
cout << ""Special input:"" << getBuffer();
}

template
void Buffer::bprint(){
for (int i = 0; i < size; i++){
cout << b_array[i] << "" "";
}
}

兄弟,这段问题略大

解决方案三:

Buffer buffer;
strcpy(buffer.getBuffer()Hello"");
这段在strcpy里面 操作的 buffer.getBuffer() 返回的是 会消失,没有保存buffer的“Hello”值

【云栖快讯】Apache旗下顶级开源盛会 HBasecon Asia 2018将于8月17日在京举行,现场仅600席,免费赠票领取入口  详情请点击
云栖社区(yq.aliyun.com)为您免费提供C++template expression的问题相关信息,包括 template 的信息 ,所有C++template expression的问题相关内容均不代表云栖社区的意见! 该页面h5页面的地址是:https://m.aliyun.com/yunqi/wenzhang/show_96828,您可以点击C++template expression的问题-手机站访问。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一

云服务器9.9元/月,大学必备

热点导航