如何通过D中的const引用循环遍历图形?

时间:2016-05-06 13:30:24

标签: const d immutability

我有一个循环遍历图表使用' const'参考,但是当我分配我的迭代变量时,我意识到它是非const的,然后我得到了很好的编译器的抱怨。

class ClassDescriptor
{
    const string name;
    const TypeInfo type;
    const ClassDescriptor base;
    const IPropertyDescriptor[string] propertiesByName;

    IPropertyDescriptor getFlattenProperty(string name)
    {
        // This declaration makes 'const(ClassDescriptor) bag'
        // Note that in this point I can't add ref keyword.
        auto bag = this;
        while(!(bag is null))
        {
            if(name in bag.propertiesByName)
            {
                return bag.propertiesByName[name];
            }

            // This assigment breaks the constness
            bag = bag.base;
        }

        return null;
    }

    public this(string name, TypeInfo type, ClassDescriptor base, const IPropertyDescriptor[string] propertiesByName)
    {
        this.name = name;
        this.type = type;
        this.base = base;
        this.propertiesByName = propertiesByName;
    }
}

1 个答案:

答案 0 :(得分:3)

听起来像是std.typecons.Rebindable

的工作

http://dpldocs.info/experimental-docs/std.typecons.Rebindable.html

import std.typecons;
Rebindable!(const typeof(this)) bag = this;

然后其余的应该是一样的。