c++ 希望使静态成员引用不可变,而不是对不可变对象的引用

fdx2calv  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(174)

由于某些原因(主要是围绕模拟能力的想法),我们有了这个抽象的接口想法...

struct BundleOfInterfaces
{
   static Interface1& interface1;
   static Interface2& interface2;
   ...
};

因此,我们通过BundleOfInterfaces::interface1.function1(...)访问接口中的函数
我如何使引用不可变,这样就没有人能做BundleOfInterfaces::interface1 = MyNewInterface1;了?
const放置在它上似乎是对const对象的引用,这迫使被引用的实现使其所有方法都是const(并防止内部状态)。
我知道我可以将它隐藏在getter函数后面,并使实际的引用成为私有的,但我假设有某种方法可以用const做到这一点,但const放在哪里似乎并不重要。

w8f9ii69

w8f9ii691#

总结一下评论里说的...
引用已经是不可变的。不能重新绑定引用。除了存储静态成员的内存使用之外,引用的简单形象仅仅是被引用对象的别名在这里是合适的。您可以赋值给引用,因为您可以赋值给Interface1的示例。防止BundleOfInterfaces::interface1 = MyNewInterface1;的唯一方法是防止对Interface1示例的赋值。这实际上与使用引用作为静态成员无关,可以通过删除赋值Interface1::operator=(const Interface1&) = delete;来实现。

相关问题