请问在调用 to_json() 时,怎么保证 ** 处的 to_json() 不是 ## 处的常对象,
从而避免无限递归调用?
是decltype做到的吗?
namespace detail {
struct to_json_fn{
template<typename BasicJsonType, typename T>
auto operator()(BasicJsonType& j, T&& val) const
noexcept(noexcept(to_json(j, std::forward<T>(val))))
-> decltype(to_json(j, std::forward<T>(val)), void())
{
return to_json(j, std::forward<T>(val)); // **
}
};
} // namespace detail/
// namespace to hold default `to_json` function
namespace{
// 相当于定义了一个常对象
// ##
constexpr const auto& to_json = detail::static_const<detail::to_json_fn>::value;} // namespace
--
FROM 115.156.208.*