我有一个函数A
,它接受一个谓词函数作为它的参数
我有另一个函数B
,它需要char
并返回int
,函数C
接受int
并返回bool
。
我的问题是如何绑定B
和C
以将其传递给函数A
。
类似的东西:
A(bindfunc(B,C))
我知道boost::bind
有效,但我正在寻找STL解决方案。
例如,
int count(vector<int> a, pred func); // A
//this functions counts all elements which satisfy a condition
int lastdigit(int x); // B
//this function outputs last digit(in decimal notation) of number x
bool isodd(int x); // C
//this function tells if number x is odd
// i want to find the count of all such numbers in a vector whose last digit is odd
// so i want something like
count(vector<int> a, bind(lastdigit, isodd))
一种不好的方法是创建一个显式执行绑定操作的冗余函数D
。
答案 0 :(得分:3)
作为compose
中缺少std
高阶函数的简单解决方法:
template <typename F1, typename F2>
struct composer :
std::unary_function
<
typename F2::argument_type,
typename F1::result_type
>
{
composer(F1 f1_, F2 f2_) : f1(f1_), f2(f2_) {}
typename F1::result_type
operator()(typename F2::argument_type x)
{ return f1(f2(x)); }
private:
F1 f1;
F2 f2;
};
template <typename F1, typename F2>
composer<F1, F2> compose(F1 f1, F2 f2)
{ return composer<F1, F2>(f1, f2); }
请注意,它不适用于二进制函数(涉及更多工作),并且您的函数必须是STL函数对象。这意味着如果你有函数指针,你必须用std::ptr_fun
包装它们。
答案 1 :(得分:1)
我不相信STL的绑定功能足以满足您的需求。