1

我对类型有困难,例如:

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

应该std::remove_pointer能够处理这些类型(我不这么认为)?怎么全部去掉*?如果&最后添加了一个或两个&符号,是否存在C++11标准中的元函数来将这种类型剥离到T不使用 thestd::remove_referencestd::remove_pointer元函数?

4

1 回答 1

10

*编写一个无论你有多少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> { };

并且::std::remove_pointer可以很好地处理这样的类型。它只是砍掉一个*.

我刚刚写的那个小元函数最终会遇到递归深度限制。但是你可能需要穿上一百多个*s 才能做到这一点。

以下是您可以如何将它与标准库元函数一起使用以删除 const 和 volatile 限定符:

 #include <type_traits>

 template <typename T>
 struct base_type : public ::std::remove_cv<typename remove_all_ref_ptr<T>::type> { };
于 2013-02-19T07:20:19.110 回答