我剛剛在std::add_pointer
的C++ 11中發現了存在。 我看了一眼在以下鏈接的文檔,但我真的不明白這樣一個對象的目的:std :: add_pointer vs經典指針
http://www.cplusplus.com/reference/type_traits/add_pointer/
- 之間有什麼主要區別例如
std::add_pointer<int>
和經典的指針即int*
? - 你如何評價這樣一個指針? (你使用
::value
?) - 什麼是增加的代表?
我剛剛在std::add_pointer
的C++ 11中發現了存在。 我看了一眼在以下鏈接的文檔,但我真的不明白這樣一個對象的目的:std :: add_pointer vs經典指針
http://www.cplusplus.com/reference/type_traits/add_pointer/
std::add_pointer<int>
和經典的指針即int*
?::value
?)template<class T>struct tag_t{using type=T;};
template<class Tag>using type=typename Tag::Type;
template<template<class...>class Z, template<class...>class Test, class T>
struct apply_if:
std::conditional_t< Test<T>{}, tag_t<Z<T>>, tag_t<T> >
{};
template<template<class...>class Z, template<class...>class Test, class T>
using apply_if_t = type<apply_if<Z,Test,T>>;
這需要一個元函數Z
和測試Test
和類型T
,並返回Z<T>
如果Test<T>
爲真,否則返回T
。
您無法通過just put a * after the type
至apply_if_t
作爲Z
。您可以通過std::add_pointer
或add_pointer_t
。
假設您只想添加指針,只要某些東西是函數類型(如int(int)
)。那麼如果X
是功能類型,則apply_if_t< std::add_pointer_t, std::is_function, X >
將是,如果不是,則X
。
std::add_pointer<T>::type
是到T*
作爲int inc(int x){return x+1;}
是到x+1
。
'add_pointer'也可以很好地引用和(因爲LWG問題)瘋狂的函數類型。前者在轉發引用方面相當方便。 –
您可能感興趣的這[我的問題](http://stackoverflow.com/questions/16435170/use-cases-for-stdadd-const-and-similar)。 – Angew
這在元編程中很有用,即編寫不知道確切類型的函數模板時。 –
@ el.pescado你能讓我成爲一個小例子嗎? – Stefano