std :: add_pointer vs经典指针

Ste*_*ano 6 pointers c++11

我刚刚发现了C++ 11中的存在std::add_pointer.我看了下面链接的文档,但我真的没有达到这样一个对象的目的:

http://www.cplusplus.com/reference/type_traits/add_pointer/

  • 例如std::add_pointer<int>,经典指针之间的主要区别是什么int*
  • 你如何尊重这样的指针?(你用::value吗?)
  • 添加代表什么?

Yak*_*ont 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>>;
Run Code Online (Sandbox Code Playgroud)

这需要一个元函数Z以及一个test Test和一个type TZ<T>如果Test<T>true则返回,否则返回T

你不能传递just put a * after the typeapply_if_t作为Z。您可以通过std::add_pointeradd_pointer_t

假设您仅在某种东西是函数类型(例如int(int))的情况下才添加指针。然后,apply_if_t< std::add_pointer_t, std::is_function, X >将是X*,如果X是一个函数类型,X如果没有。

std::add_pointer<T>::typeT*int inc(int x){return x+1;}x+1