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