8.7.3 使用有多个形参的类模板(2)

2013-10-07 16:08:58 · 作者: · 浏览: 57

8.7.3  使用有多个形参的类模板(2)

当实例化模板时,需要小心处理包含比较运算符的表达式。看看下面的语句:

  1. CBox myBoxes[] = {CBox(1,2,3), CBox(2,3,4),CBox(4,5,6), CBox(5,7,8)};  
  2. CSamples<CBox, _countof(myBoxes) > 3   3 : 2 > mySamples(myBoxes,4);// Wrong!  
  3. const int x = 2y = 1;  
  4. CSamples<aType, x > y   10 : 20 > MyType();      // Wrong! 

该语句不能正确编译,因为表达式中_countof(myBoxes)前面的>解释为右尖括号。应该将这条语句写成:

  1. CSamples<CBox, (_countof(myBoxes) > 3   3 : 2) > mySamples(myBoxes,4); 

括号确保先计算第二个模板实参的表达式,且不会与尖括号混淆。