具有两个或更多变量的函子
Functors with two variables or more
我是 C++11 的新手,我阅读了 this post 关于仿函数的内容,这很有帮助,我只是想是否有可能制作一个接收更多的仿函数比单个变量?
例如,我们有下面的 class:
class my_functor{
public:
my_functor(int a,int b):a(a),b(b){}
int operator()(int y)
{
return a*y;
}
private:
int a,b;
};
现在我想知道有什么方法可以使成员函数像
operator()(int y)
但是收到了 2 个或更多(或未知数量!)变量?
是的。您可以向 operator()
传递任意数量的参数。参见示例:
#include <iostream>
class my_functor{
public:
my_functor(int a,int b):a(a),b(b){}
int operator()(int y)
{
return a*y;
}
int operator()(int x, int y)
{
return a*x + b*y;
}
private:
int a,b;
};
int main()
{
my_functor f{2,3};
std::cout << f(4) << std::endl; // Output 2*4 = 8
std::cout << f(5,6) << std::endl; // Output 2*5 + 6*3 = 28
return 0;
}
要处理未知数量的参数,您需要查看处理可变数量参数的各种解决方案(基本上,#include <varargs.h>
,或模板参数包)。
我是 C++11 的新手,我阅读了 this post 关于仿函数的内容,这很有帮助,我只是想是否有可能制作一个接收更多的仿函数比单个变量? 例如,我们有下面的 class:
class my_functor{
public:
my_functor(int a,int b):a(a),b(b){}
int operator()(int y)
{
return a*y;
}
private:
int a,b;
};
现在我想知道有什么方法可以使成员函数像
operator()(int y)
但是收到了 2 个或更多(或未知数量!)变量?
是的。您可以向 operator()
传递任意数量的参数。参见示例:
#include <iostream>
class my_functor{
public:
my_functor(int a,int b):a(a),b(b){}
int operator()(int y)
{
return a*y;
}
int operator()(int x, int y)
{
return a*x + b*y;
}
private:
int a,b;
};
int main()
{
my_functor f{2,3};
std::cout << f(4) << std::endl; // Output 2*4 = 8
std::cout << f(5,6) << std::endl; // Output 2*5 + 6*3 = 28
return 0;
}
要处理未知数量的参数,您需要查看处理可变数量参数的各种解决方案(基本上,#include <varargs.h>
,或模板参数包)。