我有3个仿函数,并且想知道这些是否可以组合成1,也许作为模板。 可能吗?如果是的话,我该怎么办呢。 THX!
struct less_than
{
bool operator()(double prev,double curr) const
{
return prev<curr;
}
};
struct great_than
{
bool operator()(double prev,double curr) const
{
return prev>curr;
}
};
struct equal_to
{
bool operator()(double prev, double curr) const
{
return prev==curr;
}
};
答案 0 :(得分:0)
如果您的意思是,由运营商专门,那么答案是不,不是语言水平。
幸运的是,STL已经为此提供了仿函数(std::equal_to
等)。您可以直接使用它们,也可以将它们用作自己的函数类的参数。
答案 1 :(得分:0)
您可以这样做:
class Functors
{
private:
bool f1(double, double)
{
}
bool f2(double, double)
{
}
bool f3(double, double)
{
}
public:
bool test(int op, double a, double b)
{
//better use function selector, this is only simple example
if (op == 1)
return f1(a, b);
if (op == 2)
return f2(a, b);
if (op == 3)
return f3(a, b);
}
};
使用它:
vector<double> v;
int op = select_op();
//sort vector
std::sort(v.begin(), v.end(), boost::bind(&Functors::test, Functors(), op, _1, _2));
答案 2 :(得分:0)
由于这些都存在于标准库中,您可以这样做
template<class F>
struct compare
{
compare(F _f)
: f(_f) {};
bool operator()(double prev, double curr) const
{
return f(prev, curr);
}
F f;
};
并使用例如compare< std::less<double> >
。但这很没用,因为你可以直接使用标准的库函子。