类模板的static成员

下列代码可以通过编译吗?如何修改使其通过编译?
template < class T>
struct sum {
   static void foo(T op1 , T op2){
    cout << op1 <<op2; 
   }
}
sum::foo( 1 , 3 );
 
 
 

template <class 形参名,class 形参名,......> 返回类型 函数名(参数列表)

{

函数体

}

其中template和class是关键字,class可以用typename 关键字代替,在这里 typename 和class没区别 ,<>括号中的参数叫 模板形参,模板形参和函数形参很相像, 模板形参不能为空 。 一但声明了模板函数就可以用模板函数的形参名声明类中的成员变量和成员函数,即可以在该函数中使用内置类型的地方都可以使用模板形参名。 模板形参需要调用该模板函数时提供的模板实参来初始化模板形参,一旦编译器确定了实际的模板实参类型就称他实例化了函数模板的一个实例。比如swap的模板函数形式为

template <class T> void swap(T& a, T& b){},

当调用这样的模板函数时类型T就会被被调用时的类型所代替,比如swap(a,b)其中a和b是int 型,这时模板函数swap中的形参T就会被int 所代替,模板函数就变为swap(int &a, int &b)。而当swap(c,d)其中c和d是double类型时,模板函数会被替换为swap(double &a, double &b),这样就实现了函数的实现与类型无关的代码。
所以应该改成这样了。有点define的味道哦。
template<class T>  struct sum{ 
  static void foo(T op1 , T op2){ 
   cout << op1 <<op2;  
  } 
}; 
sum<int>::foo(1,3);
 
 
这道题的考点是类模板的static成员。首先说说 模板实例化,即类模板需要指定确定的类型,例如本题中sum<int> a或者sum<string> a等。    static成员函数可以由类名或者对象直接调用。在本题中,sum<int>  a;a.foo(1,3)或者sum<int>::foo(1,3)。两种形式均可。

转载于:https://www.cnblogs.com/guxuanqing/p/5886953.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值