获取指针类型指向的类型

时间:2016-06-29 19:40:56

标签: c++ templates

我想创建包含typedef类型的helper结构,模板指针参数指向:

template<class T*>
struct pointer_lower_level
{
    typedef typename T type_pointed;
};

但它给了我错误(GCC 5.3.0):

error: expected nested-name-specifier before 'T'
     typedef typename T type_pointed;
                      ^
error: expected ';' at end of member declaration

error: 'type_pointed' does not name a type
     typedef typename T type_pointed;
                        ^

对我而言,这似乎是合法的语法,但是,我度过了漫长的一天,所以我可能错了。

2 个答案:

答案 0 :(得分:6)

假设您不想使用std::remove_pointer,我认为您想要的是使用partial template specialization

template <typename>
struct pointer_lower_level;

template <typename T>
struct pointer_lower_level<T*> {
    using type_pointed = T;
};

答案 1 :(得分:3)

您需要模板专业化:

// first declare the general template...
template<class T>
struct pointer_lower_level;

// ...then provide a partial specialization for pointers
template<class T>
struct pointer_lower_level<T*>
// note this... ----------^^^^
{
    typedef T type_pointed;
};
相关问题