对于任何可取消引用的类型,我将如何实现以下目标?
我发现我目前的解决方案缺乏,因为我需要为我希望它使用的每种类型进行类模板专业化:
template<typename T>
struct get_value_type
{
typedef typename T::value_type value_type;
};
template<typename E>
struct get_value_type<std::unique_ptr<E>>
{
typedef typename E::value_type value_type;
};
template<typename E>
struct get_value_type<std::shared_ptr<E>>
{
typedef typename E::value_type value_type;
};
template<typename E>
struct get_value_type<boost::optional<E>>
{
typedef typename E::value_type value_type;
};
我已经尝试了一些方法,但它不起作用。
template<typename T, typename IsIndirect = false_type>
get_value_type
{
typedef typename T::value_type value_type;
}
template<typename T>
struct get_value_type<T, true_type>
{
typedef decltype(*boost::declval<E>())::value_type value_type;
};
typedef get_value_type<T, is_indirect<T>::type> value_type;