http://www.boost.org/doc/libs/1_51_0/doc/html/boost_lexical_cast/performance.html
考慮這個環節,串來串是非常快的
所有的測試措施的執行速度以毫秒爲10000次迭代下面的代碼塊:
typedef BOOST_DEDUCED_TYPENAME ::boost::type_traits::ice_or<
::boost::detail::is_xchar_to_xchar<Target, src >::value,
::boost::detail::is_char_array_to_stdstring<Target, src >::value,
::boost::type_traits::ice_and<
::boost::is_same<Target, src >::value,
::boost::detail::is_stdstring<Target >::value
>::value
> shall_we_copy_t;
在我們的案例shall_we_copy_t::value
將是真實的,因爲我們的第三個案例工作(Target
和src
是相同的類型和Target
類型是std::basic_string
)。
typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c<
shall_we_copy_t::value,
::boost::detail::lexical_cast_copy<src >,
BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c<
shall_we_copy_with_dynamic_check_t::value,
::boost::detail::lexical_cast_dynamic_num<Target, src >,
::boost::detail::lexical_cast_do_cast<Target, src >
>::type
>::type caster_type;
因爲,shall_we_copy_t::value
是真實的,我們caster_type將lexical_cast_copy
return caster_type::lexical_cast_impl(arg);
因此,將被稱爲lexical_cast_copy::lexical_cast_impl
,這是非常簡單的
template <typename Source>
struct lexical_cast_copy
{
static inline Source lexical_cast_impl(const Source &arg)
{
return arg;
}
};
首先,不要讓一個函數模板專門化,*只是超載*。 – Xeo
@Xeo好點[這裏解釋](http://stackoverflow.com/questions/7108033/template-specialization-vs-function-overloading)。編輯。 –