我該如何實現以下任何無效類型?獲取value_type的無效類型
我覺得我目前的解決方案缺乏,因爲我需要爲每一個類型的,我希望它一起工作做一個類模板特:
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;
很好的答案。但是,vs2010似乎沒有pointer_traits。 – ronag 2012-01-02 06:48:23
另外,對於不可解引用的類將如何工作。 – ronag 2012-01-02 07:05:11
很抱歉聽說vs2010。直到2009年底,N2982才引入pointer_traits。可能錯過了vs2010的截止日期。如果沒有嵌套的'element_type',並且'Ptr'不是'SomePointer'形式的類模板,那麼'pointer_traits'的使用就會不合格。 –
2012-01-02 14:31:53