如何从内部调用函数对象?似乎我无法使用this
。例如:
class factorial {
public:
int operator()(int n) {
if (n == 0)
return 1;
return n * ??(n-1);
}
};
我在??
放置了什么?
答案 0 :(得分:13)
#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;
}
对我来说很好。 Live example.
答案 1 :(得分:9)
您可以使用重载运算符的名称:
operator()(n-1);
或在当前对象上调用运算符:
(*this)(n-1);
答案 2 :(得分:4)
如上所述DyP
,您可以致电(*this)(n-1)
。但是,阅读起来很奇怪,所以你最好把它拆分成一个单独的calculate_factoral
方法并调用它来代替
答案 3 :(得分:2)
有几个人指出你可以使用(*this)(n - 1)
语法。但是这种语法并不完全直观,稍微好一点的解决方案可能是将实际实现分解为另一个命名方法。
class factorial {
public:
int operator()(int n) {
return impl(n);
}
private:
int impl(int n) {
// actual work here
}
};
答案 4 :(得分:1)
您可以使用显式运算符语法:
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);
}
};
答案 5 :(得分:0)
我只知道Java和递归因子可以写成:
public class Factorial{
public int factorial(int n) {
return (n > 1) ? n * factorial(n-1) : 1;
}
}
我认为同样的原则适用。