我刚刚发现了std::add_pointer
的C ++ 11中的存在。
我看了下面链接的文档,但我真的没有达到这样一个对象的目的:
http://www.cplusplus.com/reference/type_traits/add_pointer/
std::add_pointer<int>
与经典指针即int*
之间的主要区别是什么?::value
?)答案 0 :(得分:5)
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>
,否则返回{ {1}}。
您无法将T
传递给just put a * after the type
apply_if_t
。您可以传递Z
或std::add_pointer
。
假设您只想在某些东西是函数类型(例如add_pointer_t
)时添加指针。如果int(int)
是函数类型,则apply_if_t< std::add_pointer_t, std::is_function, X >
将为X*
,如果不是X
则为X
。
std::add_pointer<T>::type
是T*
,int inc(int x){return x+1;}
是x+1
。