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

标签 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。

最佳答案

clang错误消息会有所帮助

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

关于c++ - 如何在模板中添加 const 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27045520/

相关文章:

c++ - Armadillo+OpenBLAS 比 MATLAB 慢?

c++ - 在这个简单的哈希实现中**在做什么?

c++ - Qt MySQL 适配器拒绝随机连接 : Unable to allocate a MYSQL

c++ - 如何通过函数指针调用不同签名的C++函数

python - Cython C++ 和 std::map 处理

java - Spring项目模板不显示模板

c++ - 如何访问模板模板类的 typedef

c++ - 显式特化必须先于其首次使用

python - 在模板中使用 DjangoFramework 时出错

c++ - 为什么必须在何处以及为什么要放置"template"和"typename"关键字?