主题:庆祝Python跃居世界第四程序语言 -- 空格
但必须引入template.
因为C++是一种强类型语言,重载一般是指1)参数的个数不同或者2)参数的类型不同.
此例如果0与n类型一样,不满足的以上重载适用的条件。 但是1)引入模板可以使得整数(integral)可以变成类型(type),2)对圆括号()运算符重载可以使类(class)变成函数。
所以可以这样:
template<int n> struct f
{
size_t operator()()
{
return f<n-1>()*n;
}
};
template<> struct f<0>
{
size_t operator()()
{
return 1;
}
};
这么使用:
assert(f<0>() == 1);
assert(f<1>() == 1);
assert(f<2>() == 2);
assert(f<3>() == 6);
虽然形式上有点差异(有尖括号,而且参数在尖括号里),但思想本质上是一致的:即根据数值而不是类型重载,不知这是不是你想要的效果。
- 相关回复 上下关系8
压缩 3 层
🙂C++过度设计了 7 gcc296 字755 2011-03-07 10:05:28
🙂说点不同意见 1 透明 字454 2011-03-07 23:51:22
🙂C++的重载可以做到这个吗 sunsol 字39 2011-03-12 02:06:44
🙂可以
🙂我也并非完全反对重载 10 gcc296 字2012 2011-03-08 07:52:45
🙂你举的例子里之所以会产生混淆,与其说是因为 1 老石头 字534 2011-03-12 01:20:59
🙂语法是很末节的东西 1 午茶 字755 2011-03-07 13:23:28
🙂讨论一个特性的得失应当看它的机会收益 7 gcc296 字1570 2011-03-07 18:42:20