我想实现以下内容:
我定义了一个函数。当我在函数之后写 N ()
时,该函数将被称为 N 次。
我举个例子:
#include <iostream>
using namespace std;
typedef void* (*c)();
typedef c (*b)();
typedef b (*a)();
a aaa()
{
cout<<"Google"<<endl;
return (a)aaa;
}
int main()
{
aaa()()()();
system("pause");
}
然后输出是:
还有其他方法可以实现吗?
答案 0 :(得分:6)
使用仿函数很简单。
#include <iostream>
struct Function
{
Function& operator()() {
std::cout << "Google" << std::endl;
return *this;
}
};
int main()
{
Function f;
f()()()();
}
答案 1 :(得分:1)
您可能对仿函数感兴趣:
#include <iostream>
class my_functor {
public:
// if called without parameters
my_functor& operator()(){
std::cout << "print" << std::endl;
return *this;
}
// if called with int parameter
my_functor& operator()(int number){
std::cout << number << std::endl;
return *this;
}
};
int main(){
my_functor functor;
functor()(5)();
return 0;
}
通过重载函数调用操作符()
,可以向对象添加函数行为。您还可以定义不同的参数,这些参数将传递给重载的()
- 运算符,并且将调用相应的函数调用。如果要调用上一个函数调用修改过的对象实例上的函数调用,请确保返回对this-instance的引用。