Parameters 有没有一种方法可以使用动态默认参数?

Parameters 有没有一种方法可以使用动态默认参数?,parameters,d,member-functions,member-variables,default-arguments,Parameters,D,Member Functions,Member Variables,Default Arguments,我试图创建一个类,用户可以在其中修改成员变量以更改其成员函数的默认参数 class Class { public int Member; public void Method(int Argument = Member) { // This compiles fine, until I try to actually use // the method elsewhere in code! // "Error: need

我试图创建一个类,用户可以在其中修改成员变量以更改其成员函数的默认参数

class Class
{
    public int Member;

    public void Method(int Argument = Member)
    {
        // This compiles fine, until I try to actually use
        // the method elsewhere in code!

        // "Error: need 'this' to access member Member"
    }
}
到目前为止,我的解决办法是使用幻数,这显然不理想

public void Method(int Argument = 123)
{
    int RealArgument;

    if (Argument == 123) RealArgument = Member;
    else RealArgument = Argument;
}

有没有更好的方法,或者我一直使用这个“黑客”解决方案?

是的,忘记默认参数吧

class Class
{
    public int Member;

    public void Method(int Argument)
    {
        ...
    }

    public void Method()
    {
        Method(Member);
    }
}

这里不需要耍花招。

对于许多参数来说,这可能是不切实际的,但mixin可以帮助自动生成代码。使用可变模板和仔细命名可以让您仅使用基本函数和单个包装器模板就可以达到这一效果。