能否基于类型的常量性特化类模板?并验证Foo类能否通过指定编译时测试
能否基于类型的常量性特化类模板?并验证Foo类能否通过指定编译时测试
换句话说,有没有一个类Foo能通过下面这个编译时测试?
void prove_the_point() { Foo foo1{}; const Foo foo2{}; static_assert(sizeof(foo1) != sizeof(foo2)); }
问题背景
我接手了一个大型数据科学项目,为了理清代码逻辑,开始在项目里强制推行常量正确性(const-correctness)。项目里涉及各种对象、对象指针——我大多把这些原生指针替换成了shared_ptr,还有不少向量容器,当然也少不了智能指针组成的向量。
这时候问题就来了:要在shared_ptr的向量上实现常量正确性,可以说是难上加难,因为const属性不会自动传递到指针指向的对象上,除非修改API的语义(比如改用暴露迭代器而非直接返回指针向量的方式)。
在之前讨论“如何从const方法返回std::vector<int*>时传递const属性”的评论区里,我突然想到一个有意思的方向:能不能通过类型的常量性来特化类模板,让一个类的非const实例和const实例拥有不同的大小?也就是让Foo和const Foo的sizeof结果不一样,从而通过上面的编译断言测试。
备注:内容来源于stack exchange,提问作者Adam Ryczkowski
相关产品推荐
相关产品推荐

