如何在模板中添加const限定符

时间:2014-11-20 17:12:32

标签: c++ templates

即使const_value_type是指针,我也希望T成为常量,std::add_const<>无法实现这一点 所以我试过这样的事情:

template<typename value_type, bool is_pointer>
struct add_const_pointer{
    typedef const value_type type;
};

template<typename value_type>
struct add_const_pointer<value_type, true>{
    typedef const value_type *type;
};

template<typename T>
class Foo
{
public:
    typedef T value_type;
    typedef add_const_pointer<std::remove_pointer<T>, std::is_pointer<T>::value>::type const_value_type; 
    // here I get compiler error: missing type specifier - int assumed.
}

但是我遇到编译器错误:缺少类型说明符 - 假设为int。

1 个答案:

答案 0 :(得分:5)

clang错误消息会有帮助

typedef typename add_const_pointer<
//      ~~~~~~~~ Add typename
                  std::remove_pointer<T>, 
                  std::is_pointer<T>::value>::type 
                  const_value_type;