我刚刚发现了C++ 11中的存在std::add_pointer.我看了下面链接的文档,但我真的没有达到这样一个对象的目的:
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>>;
Run Code Online (Sandbox Code Playgroud)
这需要一个元函数Z以及一个test Test和一个type T,Z<T>如果Test<T>true则返回,否则返回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。