Реализация перегруженных функций - PullRequest
0 голосов
/ 17 декабря 2010

В моем заголовочном файле у меня есть это:

std::string StringExtend(const std::string Source, const unsigned int Length, const bool Reverse);
std::string StringExtend(const std::string Source, const unsigned int Length);

В моем файле cpp у меня есть это:

std::string Cranberry::StringExtend(const std::string Source, const unsigned int Length, const bool Reverse)
{
    unsigned int StartIndex = (Source.length() - 1) * Reverse;
    short int  Increment = 1 - (Reverse * 2);

    int Index = StartIndex;

    std::string Result;

    while (Result.length() < Length)
    {
        if (Reverse) Result = Source.at(Index) + Result;
        else Result += Source.at(Index);

        Index += Increment;

        if (!InRange(Index, 0, Source.length() - 1)) Index = StartIndex;
    }

    return Result;
}

std::string Cranberry::StringExtend(const std::string Source, const unsigned int Length)
{
    return StringExtend(Source, Length, false);
}

Как вы можете видеть, вторая форма функцииэто то же самое с опущенным аргументом Reverse.Есть ли способ сократить это, или мне нужно иметь прототип функции и определение для каждой формы?

Ответы [ 3 ]

7 голосов
/ 17 декабря 2010

Используйте параметр по умолчанию для параметра Reverse.

std::string StringExtend(const std::string & Source, unsigned int Length, bool Reverse = false);

Избавьтесь от второй функции:

std::string StringExtend(const std::string & Source, unsigned int Length);

2 голосов
/ 17 декабря 2010

Вы можете установить значение по умолчанию для «необязательного» параметра, например const bool Reverse = false.

1 голос
/ 17 декабря 2010

Да, использовать аргумент по умолчанию для параметра bool.Например std::string StringExtend(const std::string Source, const unsigned int Length, const bool Reverse = false); Тогда нет необходимости во второй функции

...