stl中的一些小技巧

当需要根据类型重载一个函数的时候,可以在函数定义的时候只写形参类型,不写形参变量名。

这样能够正常重载,可读性更明确,说明这个函数只是因为类型而重载,跟其中的值无关。

<pre name="code" class="cpp">using namespace std;
struct FuckAaa {};
struct FuckBbb {};
void func(int base, FuckAaa){
	cout << "fuckAaa : " << base + 10 << endl;
}
void func(int base, FuckBbb){
	cout << "fuckBbb : " << base + 20 << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
	FuckAaa fuckAaa;
	FuckBbb fuckBbb;
	func(0, fuckAaa);
	func(0, fuckBbb);
	getchar();
	return 0;
}


 

  1. 模板类内部定义了模板成员函数或者嵌套的成员模板类。在模板中,当引用这样的模板成员函数或嵌套的成员模板类时,可以在::(作用域解析)运算符、.(以对象方式访问成员)运算符、->(以指针方式访问成员)运算符之后使用template关键字,随后才是模板成员函数名字或嵌套的成员模板类名字,这使得随后的左尖括号<被解释为模板参数列表的开始,而不是小于号运算符。C++11起,这一用途也可以出现在模板以外,尽管此时template关键字不是必要的。例如:
class A { public:
    template <class U> class B{
         public: typedef int INT;
    };
    template <class V> void foo(){}
};
 
template <typename T>
int f()
{
  typename T::template B<double>::INT i; //在VS中加入template会让后面的类名变色,但是无法跳转的定义,去掉template后则相反
  i=101;
  T a, *p=&a;
  a.template foo<char>();
  p->template foo<long>();
  return 0;
}
 
int main()
{
  f<A>();
  A::B<double>::INT i;  // 自C++11起,也可写作typename A::template B<double>::INT i;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值