http://zh.highscore.de/cpp/boost/functionobjects.html#functionobjects_function
Boost.Function
boost::function 可以定义一个指针,指向具有特定签名的函数。
例如:
#include#include#include#includeint main() { boost::functionf = std::atoi;
std::cout << f("1609") << std::endl;
f = std::strlen;
std::cout << f("1609") << std::endl;
}
以上例子定义了一个指针 f,它可以指向某个接受一个类型为 const char* 的参数且返回一个类型为 int 的值的函数。 定义完成后,匹配此签名的函数均可赋值给这个指针。 这个例程就是先将 std::atoi() 赋值给 f,然后再将它重赋值为 std::strlen()。
注意,给定的数据类型并不需要精确匹配:虽然 std::strlen() 是以 std::size_t 作为返回类型的,但是它也可以被赋值给 f。
因为 f 是一个函数指针,所以被赋值的函数可以通过重载的 operator()() 操作符来调用。 取决于当前被赋值的是哪一个函数,在以上例子中将调用 std::atoi() 或 std::strlen()。
如果 f 未赋予一个函数而被调用,则会抛出一个 boost::bad_function_call 异常。
网友评论