c++ - 基于 const 限定实例化的模板特化
问题描述
假设我有一个模板类:
template<typename T>
class A
{
public:
A(T& val) : m_val{val} {}
T& val() { return m_val; }
const T& val() const { return m_val; }
//etc...
private:
T& m_val;
};
我可以对第 (1) 行和 (2) 行进行不同的模板专业化:
int a = 5;
A<int> x {a}; //(1)
const A<int> y {a}; //(2)
const int b = 10;
const A<int> z {b}; //error: binding reference of type ‘int&’ to ‘const int’ discards qualifiers
基本上,在const
我想将底层声明为的情况下m_val
,const T& m_val;
因为我已经实例化了我的包装类,const
并且我想表明内部引用也应该const
在这种情况下。
这可能吗?我尝试了几种解决方案,唯一可行的方法是显式添加const
到模板参数中,如下所示:const A<const int> z {b};
是否可以避免这种内部 const 限定符?
编辑:将成员变量更改为引用,以显示在这种情况下 const-ness 如何给编译器带来麻烦。
EDIT2:删除了默认构造函数以简化问题。
解决方案
推荐阅读
- rabbitmq - Spring streamBridge 在启动时创建rabbitmq队列
- android - Android ViewModel 正在泄漏
- xamarin.forms - Xamarin.Forms 中的设置列表
- sql - Sql需要对列进行多次求和并将结果水平拆分为一行
- python-3.x - Django 单元测试句柄 PermissionDenied
- r - 尝试在 Ubuntu 18.04 上安装 tidycensus 包时出错
- angular - 如何在 Angular Reactive Forms 中正确呈现动态表单?
- c++ - 仅当将(IF)循环合并到while循环中时才过早地强制结束while循环?
- python - 安装 Pillow 后出现 ModuleNotFoundError
- bash - 如何从 .gitconfig 别名调用外部脚本?