类模板中的成员函数模板的正确使用方法难道不是这样的吗?

bsnry 2012-05-03 11:55:47


类模板中的成员函数模板的正确使用方法:函数模板也需要指名类型,类模板也要指名。好像只有这种正确方法吧,其他都不对吧。


以下是个演示:


template<class T>
class A
{

public:

template<class T2>
void fun()
{
cout<<"hello c++!"<<endl;
}

};



A a<int>;
a.fun<double>(); //函数要指名类型的。。



但是发现vector的一段代码不是这样,感觉很奇怪。。

template<class T, class Alloc=alloc>
class vector
{
template <class ForwardIterator>

iterator allocate_and_copy(size_type n,
ForwardIterator first, ForwardIterator last) ;

..............

};

使用模板函数:allocate_and_copy也应该指出类型才对啊。。。

但是下面这段代码没有指名,就是用了。


vector(const vector<T, Alloc>& x) {


start = allocate_and_copy(x.end() - x.begin(), x.begin(), x.end());
//直接传参数,x.end()类型是iterator,谁来执行函数类型是:iterator???
.......................

}

...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bsnry 2012-05-04
  • 打赏
  • 举报
回复
2楼是对的。。。

大尾巴猫 2012-05-04
  • 打赏
  • 举报
回复
我一直是下面这么写的,应该对的吧。

template<typename Type>
class A
{
public:
void fun();
};

template<typename Type>
void A<Type>::fun()
{
cout << "hellow!" << endl;
}

调用的时候:

A<int> a;
a.fun();
A<double> b;
b.fun();

当然在这里例子没有具体的数值体现不同的类型。
ri_aje 2012-05-04
  • 打赏
  • 举报
回复
不指明会从调用实参的类型中推导模板形参类型。

template<class T2>
void fun()

你这样的必须指明,是因为没有参数可供推导,改成这样就可以推导了。

template<class T2>
void fun(T2);
a.fun(2.0); // T2 will be deduced as double on this call

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧