8.7.3 使用有多个形参的类模板(2)
当实例化模板时,需要小心处理包含比较运算符的表达式。看看下面的语句:
- CBox myBoxes[] = {CBox(1,2,3), CBox(2,3,4),CBox(4,5,6), CBox(5,7,8)};
- CSamples<CBox, _countof(myBoxes) > 3 3 : 2 > mySamples(myBoxes,4);// Wrong!
- const int x = 2, y = 1;
- CSamples<aType, x > y 10 : 20 > MyType(); // Wrong!
该语句不能正确编译,因为表达式中_countof(myBoxes)前面的>解释为右尖括号。应该将这条语句写成:
- CSamples<CBox, (_countof(myBoxes) > 3 3 : 2) > mySamples(myBoxes,4);
括号确保先计算第二个模板实参的表达式,且不会与尖括号混淆。