【Boost】boost::function紹介
1981 ワード
1.紹介 Boost.Functionライブラリには、クラスの関数オブジェクトのパッケージが含まれています.その概念は広義のコールバック関数に似ている.関数ポインタと同じ特性を持つが、呼び出しインタフェースも含まれている.1つの関数ポインタは、場所で呼び出されるか、コールバック関数として機能することができる.boost.functionは、関数ポインタの代わりに、より大きな柔軟性を提供することができる.2.使用 Boost.Functionには2つの形式がある:boost::functionf 使用タイプ:一般関数、メンバー関数、関数オブジェクト. functionを使用する場合、empty関数または0と比較して、有効な関数を指すかどうかを判断できます.functionが有効な関数を指さない場合、呼び出し時にbad_が放出されます.function_コールの異常.functionのclear関数は、function自体が空の場合、関数を呼び出しても問題はありません.
3.例
3.例
int fsum(int i, int j)
{
return i + j;
}
class Person
{
public:
void operator() (std::string name, int age)
{
std::cout << name << ": " << age << std::endl;
}
};
class Car
{
public:
Car(){}
virtual ~Car(){}
void info(int i)
{
std::cout << "info = " << i << std::endl;
}
};
void test_function()
{
// 1.
boost::function<int(int, int)> func1;
func1 = fsum;
std::cout << "4 + 5 = " << func1(4, 5) << std::endl;
// 2.
boost::function<void(std::string, int)> func2;
Person person;
func2 = person;
func2("myname", 30);
// 3.
boost::function<void(Car*, int)> func3;
func3 = &Car::info;
Car car;
func3(&car, 25);
// 4.
boost::function<int(int, int)> func4;
assert(func4.empty());
assert(!func1.empty());
func1.clear();
assert(func1.empty());
try
{
func1(4, 5);
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
}