std :: add_pointer vs经典指针

时间:2016-04-19 11:19:08

标签: pointers c++11

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

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

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

1 个答案:

答案 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。您可以传递Zstd::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>::typeT*int inc(int x){return x+1;}x+1