Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

策略類參考(Policy Class Reference)

在這裡沒有太多的要說,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_errorboost::math::policies::domain_error<> 的一個實例,domain_errorerror_policy_type 的枚舉值之一。

policy<...>::pole_error_type

指定如何處理pole-errors,是模板參數為pole_errorboost::math::policies::pole_error<> 的一個實例, pole_errorerror_policy_type 的枚舉值之一。

policy<...>::overflow_error_type

指定如何處理溢出錯誤,是模板參數為overflow_errorboost::math::policies::overflow_error<> 的一個實例,overflow_errorerror_policy_type 的枚舉值之一。

policy<...>::underflow_error_type

指定如何處理下溢錯誤,是模板參數為underflow_errorboost::math::policies::underflow_error<> 的一個實例,underflow_errorerror_policy_type 的枚舉值之一

policy<...>::denorm_error_type

指定如何處理 denorm errors,是模板參數為denorm_errorboost::math::policies::denorm_error<> 的一個實例,denorm_errorerror_policy_type 的枚舉值之一。

policy<...>::rounding_error_type

指定如何處理捨入錯誤,是模板參數為rounding_errorboost::math::policies::rounding_error<> 的一個實例,rounding_errorerror_policy_type 的枚舉值之一。

policy<...>::evaluation_error_type

指定如何處理計算錯誤,是模板參數為evaluation_errorboost::math::policies::evaluation_error<> 的實例之一,evaluation_errorerror_policy_type 的枚舉值之一。

policy<...>::indeterminate_error_type

指定如何處理未定義結果錯誤,是模板參數為indeterminate_result_errorboost::math::policies::indeterminate_result_error<>的一個實例, indeterminate_result_errorerror_policy_type 的枚舉值之一。

policy<...>::precision_type

指定內部精度來使用二進制數字( binary digits )(使用0來表示無論內部精度是多少)。是boost::math::policies::digits2<N> 的一個實例,這個類反過來又繼承自boost::mpl::int_<N>

policy<...>::promote_float_type

指定是否在內部進行從floatdouble 精確度的提升。是boost::math::policies::promote_float<B> 一個實例,這個類反過來又繼承自boost::mpl::bool_<B>

policy<...>::promote_double_type

指定是否在內部進行從doublelong 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 可以用來使用一個或多個策略來合併成一個策略:例如,許多特殊函數在實際的函數實現之前 使用這個類來將它們不使用的策略設置為缺省的策略。通過這種方式來避免了代碼膨脹。因為實際的實現依賴於實際使用的策略類型。


PrevUpHomeNext