gpt4 book ai didi

pointers - std::add_pointer 与经典指针

转载 作者:行者123 更新时间:2023-12-03 06:26:29 29 4
gpt4 key购买 nike

我刚刚发现 C++ 11 中存在 std::add_pointer 。我查看了以下链接中的文档,但我并没有真正理解这样一个对象的目的:

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

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

最佳答案

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>为 true,否则返回 T .

您无法通过just put a * after the typeapply_if_tZ 。您可以通过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 .

关于pointers - std::add_pointer 与经典指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716843/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com