AFAIK std::bind1st
接受二元仿函数和参数,并返回一个已绑定第一个参数的一元仿函数。 STL是否提供了一个类似于std::bind1st
的函数,它接受一元函数和一个参数,并返回一个没有参数的函数?
编辑:我需要一个旧版本的解决方案,而不是C ++ 11 (我没有放置该标签)
答案 0 :(得分:0)
一种方法是自己编写活页夹
template<typename FUNCTION, typename ARG_TYPE, typename RETURN_TYPE>
struct bind_it
{
FUNCTION function;
ARG_TYPE argument;
bind_it(ARG_TYPE value, FUNCTION f):function(f){
argument = value;
}
RETURN_TYPE operator()(){
return function(argument);
}
};
我确定有更好的方法来编写活页夹。
并像
一样使用它int f(int i){
return i + 2;
}
int main()
{
bind_it<int(*)(int), int, int> bound(5, f);
int se7en = bound();
}
答案 1 :(得分:0)
似乎,STL没有提供解决方案(std::bind
来自C ++ 11),所以我的版本是:
#include <iostream>
#include <functional>
template <typename Operation>
class bound_unary_function
: public std::unary_function<typename Operation::argument_type,
typename Operation::result_type> {
typedef bound_unary_function<Operation> _Self;
Operation op;
typename _Self::argument_type arg;
public:
bound_unary_function(const Operation& _op, const typename _Self::argument_type& _arg)
: op(_op), arg(_arg) { }
typename _Self::result_type operator()() {
return op(arg);
}
};
template <typename Operation>
bound_unary_function<Operation> bind_unary_function(const Operation& op,
const typename Operation::argument_type& arg) {
return bound_unary_function<Operation>(op, arg);
}
int inc(int x) {
return ++x;
}
int main() {
std::cout << "inc(0)=" << bind_unary_function(std::ptr_fun(inc), 0)() << '\n';
return 0;
}
bind_unary_function
比显式构建bound_unary_function
更方便,因为它具有自动模板参数推导功能。