Как вызвать последовательность функций? - PullRequest
0 голосов
/ 25 февраля 2012

На самом деле мне нужно знать, как выполняется эта строка.

Пример:

Browser("InternetExplorer").Page("Stackoverflow").WebElement("textbox").set "user"

Вышеприведенные строки выполняются как установка браузера в Internet Explorer и нахождение страницы «stackoverflow» в нема затем найти в нем webelement «текстовое поле» и установить для него значения «пользователь».таким образом, операция выполняется.

Я хочу знать, как выполняется этот последовательный вызов.Я не хочу, чтобы в браузере был установлен Internet Explorer и т. Д.

Мне нужно выполнить простое утверждение, например

Fun ("add"). Values ​​("2,3") .compute

Мне нужно выполнить приведенную выше строку, вызвав функцию «add», затем значения «2,3» будут переданы в качестве параметра, затем «compute» добавит его, и окончательный результат должен вернуть «5».

Как это сделать?Должны ли мы использовать разные классы для «Fun» и «values» или нам нужно реализовать их как «функции» одного и того же класса.

Как обработать вызов последовательности?

1 Ответ

3 голосов
/ 25 февраля 2012

Для достижения этого эффекта достаточно вернуть ссылку на существующий объект:

class Operator
{
public:
    Operator(const string& opAsStr)
    {
        ...
    }

    Operator& Values(const string& operands)
    {
        ....
        return *this;
    }

    int Compute() // Compute must be a function, no properties in C++
    {
        ...
    }
};

// Usable like this
Operator("Add").Values("2,3").Compute()

Определяя больше функций, возвращающих *this, вы можете связать много вызовов. Обратите внимание, что вы можете вернуть значение (т.е. Operator вместо ссылки или константной ссылки в зависимости от ваших вариантов использования). Вы также можете вернуть ссылку (или значение) на объект другого класса:

class A
{
public:
    void DoSomething()
    {
        ....
    }
};

class B
{
public:
    A MakeA()
    {
         return A();
    }
};

B().MakeA().DoSomething();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...