我想创建包含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;
^
对我而言,这似乎是合法的语法,但是,我度过了漫长的一天,所以我可能错了。
答案 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;
};