boost :: function函数指针参数?

时间:2010-06-12 20:17:49

标签: c++ boost

boost :: function如何获取函数指针并从中获取参数?我想包装一个函数指针,以便在调用之前对其进行验证。能够像调用boost :: function一样使用()运算符并且不必访问函数指针成员就可以了。

    Wrapper func;
    func(5); //Yes :D
    func.Ptr(5) //Easy to do, but not as nice looking

2 个答案:

答案 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?它允许的方式多于函数指针。