Val*_*kea 2 c++ templates pointers reference
我试图找到一种方法来获取模板参数的基类.
考虑以下课程:
template <class C>
class Foo
{
public:
Foo(){};
~Foo(){};
C* ptr;
};
Run Code Online (Sandbox Code Playgroud)
如果C是参考(例如Test&)那么ptr是C&*
但我需要得到一个指针基类,无论C是引用,指针还是其他任何东西.
反正有没有获得C的"基础"类,所以我可以创建我需要的指针?
如果您确实需要底层元素类型,则可以使用删除类型操作特征的递归应用程序:
#include <type_traits>
// precv = pointer, reference, extents, const, and volatile
template <typename T>
struct remove_precv
{
typedef typename std::remove_pointer<
typename std::remove_reference<
typename std::remove_all_extents<
typename std::remove_cv<T>::type>::type>::type>::type type;
};
template <typename T, typename U>
struct element_type_impl
{
typedef typename element_type_impl<
typename remove_precv<T>::type, T>::type type;
};
template <typename T>
struct element_type_impl<T, T>
{
typedef T type;
};
template <typename T>
struct element_type
{
struct null_type { };
typedef typename element_type_impl<T, null_type>::type type;
};
Run Code Online (Sandbox Code Playgroud)
例如,element_type<int***[42]>::type是int.