#parameters #d #member-functions #member-variables #default-arguments
#параметры #d #функции-члены #переменные-члены #аргументы по умолчанию
Вопрос:
Я пытаюсь создать класс, в котором пользователь может изменять переменные-члены, чтобы изменять аргументы по умолчанию своих функций-членов.
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;
}
Есть ли лучший способ, или я застрял с этим «хакерским» решением?
Ответ №1:
Да, забудьте об аргументе по умолчанию.
class Class
{
public int Member;
public void Method(int Argument)
{
...
}
public void Method()
{
Method(Member);
}
}
Здесь не нужно хитрить.
Комментарии:
1. Это может быть непрактично для многих аргументов, но mixins могут помочь сгенерировать код автоматически.
2. Использование шаблонов переменных и тщательное присвоение имен может позволить вам получить этот эффект только с базовой функцией и одним шаблоном-оболочкой.