![]() |
Home | Libraries | People | FAQ | More |
在這裡沒有太多的要說,policy
類只是一系列的策略的編譯時的包裝容器:
#include <boost/math/policies/policy.hpp>
namespace boost{ namespace math{ namespace policies template <class A1 = default_policy, class A2 = default_policy, class A3 = default_policy, class A4 = default_policy, class A5 = default_policy, class A6 = default_policy, class A7 = default_policy, class A8 = default_policy, class A9 = default_policy, class A10 = default_policy, class A11 = default_policy, class A12 = default_policy, class A13 = default_policy> struct policy { public: typedef computed-from-template-arguments domain_error_type; typedef computed-from-template-arguments pole_error_type; typedef computed-from-template-arguments overflow_error_type; typedef computed-from-template-arguments underflow_error_type; typedef computed-from-template-arguments denorm_error_type; typedef computed-from-template-arguments rounding_error_type; typedef computed-from-template-arguments evaluation_error_type; typedef computed-from-template-arguments indeterminate_result_error_type; typedef computed-from-template-arguments precision_type; typedef computed-from-template-arguments promote_float_type; typedef computed-from-template-arguments promote_double_type; typedef computed-from-template-arguments discrete_quantile_type; typedef computed-from-template-arguments assert_undefined_type; }; template <...argument list...> typename normalise<policy<>, A1>::type make_policy(...argument list..); template <class Policy, class A1 = default_policy, class A2 = default_policy, class A3 = default_policy, class A4 = default_policy, class A5 = default_policy, class A6 = default_policy, class A7 = default_policy, class A8 = default_policy, class A9 = default_policy, class A10 = default_policy, class A11 = default_policy, class A12 = default_policy, class A13 = default_policy> struct normalise { typedef computed-from-template-arguments type; };
policy
類的成員 typedef 打算作為庫的內部使用,但在這裡出於完整性的考慮而進行了簡要的說明。
policy<...>::domain_error_type
指定如何處理定義域錯誤,是模板參數為domain_error
的boost::math::policies::domain_error<>
的一個實例,domain_error
是error_policy_type
的枚舉值之一。
policy<...>::pole_error_type
指定如何處理pole-errors,是模板參數為pole_error
的boost::math::policies::pole_error<>
的一個實例,
pole_error
是error_policy_type
的枚舉值之一。
policy<...>::overflow_error_type
指定如何處理溢出錯誤,是模板參數為overflow_error
的 boost::math::policies::overflow_error<>
的一個實例,overflow_error
是error_policy_type
的枚舉值之一。
policy<...>::underflow_error_type
指定如何處理下溢錯誤,是模板參數為underflow_error
的boost::math::policies::underflow_error<>
的一個實例,underflow_error
是 error_policy_type
的枚舉值之一
policy<...>::denorm_error_type
指定如何處理 denorm errors,是模板參數為denorm_error
的boost::math::policies::denorm_error<>
的一個實例,denorm_error
是error_policy_type
的枚舉值之一。
policy<...>::rounding_error_type
指定如何處理捨入錯誤,是模板參數為rounding_error
的boost::math::policies::rounding_error<>
的一個實例,rounding_error
是error_policy_type
的枚舉值之一。
policy<...>::evaluation_error_type
指定如何處理計算錯誤,是模板參數為evaluation_error
的boost::math::policies::evaluation_error<>
的實例之一,evaluation_error
是error_policy_type
的枚舉值之一。
policy<...>::indeterminate_error_type
指定如何處理未定義結果錯誤,是模板參數為indeterminate_result_error
的boost::math::policies::indeterminate_result_error<>的一個實例,
indeterminate_result_error
是error_policy_type
的枚舉值之一。
policy<...>::precision_type
指定內部精度來使用二進制數字( binary digits )(使用0來表示無論內部精度是多少)。是boost::math::policies::digits2<N>
的一個實例,這個類反過來又繼承自boost::mpl::int_<N>
。
policy<...>::promote_float_type
指定是否在內部進行從float
到double
精確度的提升。是boost::math::policies::promote_float<B>
一個實例,這個類反過來又繼承自boost::mpl::bool_<B>
。
policy<...>::promote_double_type
指定是否在內部進行從double
到long double
精確度的提升。是boost::math::policies::promote_float<B>
一個實例,這個類反過來又繼承自boost::mpl::bool_<B>
.
policy<...>::discrete_quantile_type
指定如何計算離散分位點,是使用discrete_quantile_policy_type
值之一實例化的 boost::math::policies::discrete_quantile<>
的一個實例。
policy<...>::assert_undefined_type
指定數學上未定義的性質是否設定為編譯時錯誤,或作為運行時錯誤。是boost::math::policies::assert_undefined<B>
一個實例,這個類反過來又繼承自boost::math::mpl::bool_<B>
.
template <...argument list...> typename normalise<policy<>, A1>::type make_policy(...argument list..);
make_policy
是一個輔助函數,用於將一系統的策略轉換為正規化的(normalised)的 policy
類。
template <class Policy, class A1 = default_policy, class A2 = default_policy, class A3 = default_policy, class A4 = default_policy, class A5 = default_policy, class A6 = default_policy, class A7 = default_policy, class A8 = default_policy, class A9 = default_policy, class A10 = default_policy, class A11 = default_policy, class A12 = default_policy, class A13 = default_policy> struct normalise { typedef computed-from-template-arguments type; };
normalise
類模板將一個policy
類的實例轉化為正常的形式(normalised form)。這在內部用於減少代碼膨脹:因此實例化一個使用policy<A,B>
策略或policy<B,A>
策略的特殊函數實際上生成了相同的代碼。
更進一步,normalise
可以用來使用一個或多個策略來合併成一個策略:例如,許多特殊函數在實際的函數實現之前 使用這個類來將它們不使用的策略設置為缺省的策略。通過這種方式來避免了代碼膨脹。因為實際的實現依賴於實際使用的策略類型。