由于某些原因(主要是围绕模拟能力的想法),我们有了这个抽象的接口想法...
struct BundleOfInterfaces
{
static Interface1& interface1;
static Interface2& interface2;
...
};
因此,我们通过BundleOfInterfaces::interface1.function1(...)
访问接口中的函数
我如何使引用不可变,这样就没有人能做BundleOfInterfaces::interface1 = MyNewInterface1;
了?
将const
放置在它上似乎是对const对象的引用,这迫使被引用的实现使其所有方法都是const(并防止内部状态)。
我知道我可以将它隐藏在getter函数后面,并使实际的引用成为私有的,但我假设有某种方法可以用const
做到这一点,但const
放在哪里似乎并不重要。
1条答案
按热度按时间w8f9ii691#
总结一下评论里说的...
引用已经是不可变的。不能重新绑定引用。除了存储静态成员的内存使用之外,引用的简单形象仅仅是被引用对象的别名在这里是合适的。您可以赋值给引用,因为您可以赋值给
Interface1
的示例。防止BundleOfInterfaces::interface1 = MyNewInterface1;
的唯一方法是防止对Interface1
示例的赋值。这实际上与使用引用作为静态成员无关,可以通过删除赋值Interface1::operator=(const Interface1&) = delete;
来实现。