如何从自身内部调用函数对象?好像不能用this
。例子:
class factorial {
public:
int operator()(int n) {
if (n == 0)
return 1;
return n * ??(n-1);
}
};
我放在什么位置??
?
如何从自身内部调用函数对象?好像不能用this
。例子:
class factorial {
public:
int operator()(int n) {
if (n == 0)
return 1;
return n * ??(n-1);
}
};
我放在什么位置??
?
#include <iostream>
class factorial {
public:
int operator()(int n) {
if (n == 0)
return 1;
return n * (*this)(n-1);
}
};
int main()
{
std::cout << factorial()(5) << std::endl;
}
对我来说很好。活生生的例子。
您可以使用重载运算符的名称:
operator()(n-1);
或在当前对象上调用运算符:
(*this)(n-1);
如前所述DyP
,您可以调用(*this)(n-1)
. 然而,读起来很奇怪,所以你最好把它分成一个单独的calculate_factoral
方法并调用它
正如一些人指出的那样,您可以只使用(*this)(n - 1)
语法。但是这种语法并不完全直观,更好的解决方案可能是将实际实现分解到另一个命名方法中。
class factorial {
public:
int operator()(int n) {
return impl(n);
}
private:
int impl(int n) {
// actual work here
}
};
您可以使用显式运算符语法:
class factorial {
int operator()(int n) {
if (n == 0)
return 1;
return n * operator()(n-1);
}
};
或取消引用this
:
class factorial {
int operator()(int n) {
if (n == 0)
return 1;
return n * (*this)(n-1);
}
};
肯定是阶乘?
我只知道Java,递归阶乘可以写成:
public class Factorial{
public int factorial(int n) {
return (n > 1) ? n * factorial(n-1) : 1;
}
}
我假设同样的原则也适用。