boost :: function如何获取函数指针并从中获取参数?我想包装一个函数指针,以便在调用之前对其进行验证。能够像调用boost :: function一样使用()运算符并且不必访问函数指针成员就可以了。
Wrapper func; func(5); //Yes :D func.Ptr(5) //Easy to do, but not as nice looking
答案 0 :(得分:2)
您需要重载operator()
。要确定函数的返回类型,arity和参数类型,可以使用类似Boost.TypeTraits:
#include <boost/type_traits.hpp>
template <typename Function>
struct Wrapper
{
typedef typename boost::function_traits<Function>::arg1_type Arg1T;
typedef typename boost::function_traits<Function>::result_type ReturnT;
Wrapper(Function func) : func_(func) { }
ReturnT operator()(Arg1T arg) { return func_(arg); }
Function* func_;
};
bool Test(int x) { return x < 42; }
int main()
{
Wrapper<bool(int)> CallsTest(&Test);
CallsTest(42);
}
答案 1 :(得分:0)
这样的东西?
class Functor
{
public:
/// type of pointer to function taking string and int and returning int
typedef int ( *func_ptr_t )( const std::string&, int );
explicit Functor( func_ptr_t f ) : fptr_( f ) {}
int operator()( const std::string& s, int i ) const { return fptr_( s, i ); }
private:
func_ptr_t fptr_; //< function pointer
};
但为什么不使用boost::function
?它允许的方式多于函数指针。