Boost C++ 库

...世界上最受推崇和精心设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

Next

第 1 章。Boost.Functional/OverloadedFunction 1.0.0

Lorenzo Caminiti

根据 Boost 软件许可,1.0 版(请参阅随附的 LICENSE_1_0.txt 文件或复制于 https://boost.ac.cn/LICENSE_1_0.txt)分发。

目录

简介
入门
编译器和平台
安装
教程
重载
不使用函数类型
参考
鸣谢

此库允许将不同的函数重载到单个函数对象中。

考虑以下具有不同签名的函数

const std::string& identity_s(const std::string& x) // Function (as pointer).
    { return x; }

int identity_i_impl(int x) { return x; }
int (&identity_i)(int) = identity_i_impl; // Function reference.

double identity_d_impl(double x) { return x; }
boost::function<double (double)> identity_d = identity_d_impl; // Functor.

与其使用它们各自的名称调用它们(此处 BOOST_TEST 等效于 assert):[1]

BOOST_TEST(identity_s("abc") == "abc");
BOOST_TEST(identity_i(123) == 123);
BOOST_TEST(identity_d(1.23) == 1.23);

可以使用此库创建一个名为 identity 的单个重载函数对象(或 函子),它将对特定函数的调用聚合在一起(另请参见 functor.cppidentity.hpp

boost::overloaded_function<
      const std::string& (const std::string&)
    , int (int)
    , double (double)
> identity(identity_s, identity_i, identity_d);

// All calls via single `identity` function.
BOOST_TEST(identity("abc") == "abc");
BOOST_TEST(identity(123) == 123);
BOOST_TEST(identity(1.23) == 1.23);

请注意,这些函数是如何通过单个重载函数对象 identity 调用的,而不是使用它们不同的名称 identity_sidentity_iidentity_d



[1] 在本文档中提供的大多数示例中,Boost.Core/LightweightTest (boost/core/lightweight_test.hpp) 宏 BOOST_TEST 用于检查正确性条件(概念上类似于 assert)。如果检查的条件失败,则不会中止程序的执行,而是使 boost::report_errors 返回一个非零的程序退出代码。使用 Boost.Core/LightweightTest 可以将示例添加到库回归测试中,从而确保它们始终可以正确编译和运行。


Next