将3个函子组合成1个
combining 3 functors into 1
我有3个函子,想知道这些是否可以组合成1,也许作为模板。这可能吗?如果有,我该怎么做呢?谢谢!
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;
}
};
如果您的意思是由操作符专门化,那么答案是,不,不是在语言级别。
幸运的是,STL已经为此提供了函子(std::equal_to
等)。您既可以直接使用它们,也可以将它们用作您自己的函数类的参数。
由于这些都存在于标准库中,因此您只需执行
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> >
。但是这将是非常无用的,因为您可以直接使用标准库函数。
你可以这样做:
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));
相关文章:
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 我需要将多个函数组合为一个函数
- 如何在加密++中将两个源组合成新的源
- 测试两个类型列表中的所有组合
- 将多个 for 循环组合成单个迭代器
- 为 C++11 算法组合多个谓词
- 我在C++中使用提升哈希函数将 3 个双精度组合成一个面临冲突的哈希
- 如何将这两个函数组合成一个实现?
- 如何将两个代码组合成一个函数?
- 如何遍历几个每小时一次的根(.root)文件,并将它们组合成更大的每日数据.root文件?
- 如何通过组合多个字符数组来创建字符数组?
- 如何组合两个整数向量
- 在C++中将返回unique_ptr和shared_ptr的两个工厂方法组合为一个
- 将多个模板相互组合
- 有没有办法组合多个几乎相同的功能?
- 最后一行欧普特两个组合输出问题?如果其他语句
- 从二十二个组合转换为十进制
- 这是我的程序编写每十亿个组合的一种更有效的方式
- Win32 API从带有两个组合框的对话框中读取组合框值
- 检查几个组合框的索引是否唯一