C++ 递归std::删除\u指针?

C++ 递归std::删除\u指针?,c++,c++11,C++,C++11,我在类型方面有困难,例如: T****************************************** std::remove_pointer是否应该能够处理此类类型(我不这么认为)?如何删除所有的*?如果在末尾添加了一个和&或两个符号,从C++11标准中是否存在一个元函数,可以将此类类型拆分为T,而无需同时使用std::remove_reference和std::remove_pointer元函数?编写一个无论有多少个*和&s您拥有的 template <typename

我在类型方面有困难,例如:

T******************************************

std::remove_pointer
是否应该能够处理此类类型(我不这么认为)?如何删除所有的
*
?如果在末尾添加了一个和&或两个符号,从
C++11
标准中是否存在一个元函数,可以将此类类型拆分为
T
,而无需同时使用
std::remove_reference
std::remove_pointer
元函数?

编写一个无论有多少个
*
&
s您拥有的

template <typename T>
struct remove_all_ref_ptr { typedef T type; };

template <typename T>
struct remove_all_ref_ptr<T *> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T * const> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T * volatile> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T * const volatile> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T &> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T &&> : public remove_all_ref_ptr<T> { };

编写一个返回基类型的元函数并不难,不管有多少个
*
s和
&
s

template <typename T>
struct remove_all_ref_ptr { typedef T type; };

template <typename T>
struct remove_all_ref_ptr<T *> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T * const> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T * volatile> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T * const volatile> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T &> : public remove_all_ref_ptr<T> { };

template <typename T>
struct remove_all_ref_ptr<T &&> : public remove_all_ref_ptr<T> { };

typedef
不应该是
public
吗?或者
类不应该是
struct
吗?@user1095108:你说得对。我的编译器(g++4.7.2)失败了。:-)我想这个元函数可以很容易地改进为剥离
cv
?@user1095108:是的。实际上,我应该在那里处理
*const
一案。我认为编辑应该做到这一点。@user1095108:我添加了一些东西来删除常量和volatile限定符。当然,这不能解决的一个问题是将智能指针类型展开为指向类型。
typedef
不应该是
public
还是
被制作成
struct
?@user1095108:你说得对。我的编译器(g++4.7.2)失败了。:-)我想这个元函数可以很容易地改进为剥离
cv
?@user1095108:是的。实际上,我应该在那里处理
*const
一案。我认为编辑应该做到这一点。@user1095108:我添加了一些东西来删除常量和volatile限定符。当然,这不能解决的一个问题是将智能指针类型展开为指向类型。为什么标准中会存在这种情况?进行这种转换的频率有多高?我想不出什么时候它会有用,
t*
t*********
几乎没有共同点,它们没有指向相同的类型,那么为什么从它们中提取
t
会有用呢?@JonathanWakely我需要这个来实例化t,即使提供了
t******
。我不知道它为什么会存在于标准中,但如果它存在,我会使用标准中的元函数。为什么会存在于标准中?进行这种转换的频率有多高?我想不出什么时候它会有用,
t*
t*********
几乎没有共同点,它们没有指向相同的类型,那么为什么从它们中提取
t
会有用呢?@JonathanWakely我需要这个来实例化t,即使提供了
t******
。我不知道为什么它会存在于标准中,但如果它存在,我会使用标准中的元函数。