Эта библиотека позволяет перегружать различные функции в один функциональный объект.
Рассмотрим следующие функции, которые имеют различные подписи:
const std::string& identity_s(const std::string& x)
{ return x; }
int identity_i_impl(int x) { return x; }
int (&identity_i)(int) = identity_i_impl;
double identity_d_impl(double x) { return x; }
boost::function<double (double)> identity_d = identity_d_impl;
Instead of calling them using their separate names (here BOOST_TEST
is equivalent to assert):
[]
BOOST_TEST(identity_s("abc") == "abc");
BOOST_TEST(identity_i(123) == 123);
BOOST_TEST(identity_d(1.23) == 1.23);
Можно использовать эту библиотеку для создания одного перегруженного функционального объекта (или functor) под названием identity, который объединяет вызовы к конкретным функциям (см. также functor.cpp и identity.hpp):
boost::overloaded_function<
const std::string& (const std::string&)
, int (int)
, double (double)
> identity(identity_s, identity_i, identity_d);
BOOST_TEST(identity("abc") == "abc");
BOOST_TEST(identity(123) == 123);
BOOST_TEST(identity(1.23) == 1.23);
Обратите внимание, как функции называются через один перегруженный объект функции identity вместо использования их различных имен identity_s, identity_i и identity_d.