class - 调用不可变类的成员函数

标签 class d immutability member-functions

immutable class Foo
{
    void bar()
    {
    }
}

void main()
{
    auto x = new Foo();
    x.bar();
    // Error: function test.Foo.bar () immutable is not callable
    //         using argument types ()
}

我必须在程序中更改什么才能使 x.bar() 编译? x 的类型是否错误?

最佳答案

看起来像一个错误。 x 被推断为 Foo 类型,虽然它是一个不可变类,但它被视为一个可变变量,这导致 x.bar() 失败,因为 bar() 是一个不可变的方法。

解决方法是提供一个空的不可变构造函数,

immutable class Foo
{
    void bar()
    {
    }

    immutable this() {}    // <---
}

这导致 new Foo() 表达式返回 immutable(Foo)

关于class - 调用不可变类的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11861091/

相关文章:

java - 使用通用类类型实例化 DynamoDBQueryExpression

关于外部类私有(private)变量访问的java内部/外部类问题

java - java中有些私有(private)内部类可以不继承吗?

user-interface - 奇怪的 DWT 控件风格

java - 为什么java中的Boolean这样的Wrapper类是不可变的?

javascript - 尝试修改功能性 'pick' 函数,以便它返回对修改后的对象的选择,以将 redux 不可变映射状态传递给 props

C++ 类。类中的值不会更新

module - 在 D 项目中组织模块

pointers - D2 : Function Pointers won't compile

performance - Coffeescript 中的自定义集合和可变性