如何调用函数序列?

时间:2012-02-25 04:59:29

标签: c# c++ visual-studio-2010 generics

实际上我需要知道这条线是如何被执行的。

示例:

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

上面的行执行就像将浏览器设置为Internet Explorer并在其中查找页面“stackoverflow”,然后在其中找到webelement“textbox”,然后将其值设置为“user”。这样就完成了操作。

我想知道这个序列调用是如何完成的。我不想将浏览器设置为Internet Explorer等等。

我需要执行一个像

这样的简单语句

趣( “添加”)。值( “2,3”)。计算

我需要通过调用“add”函数执行上面的行,然后将值“2,3”作为参数传递,然后“compute”添加它,最后的结果应该返回“5”。

怎么做?我们是否必须为“Fun”和“values”使用不同的类,或者我们需要将它们作为同一类的“函数”来实现。

如何处理序列调用?

1 个答案:

答案 0 :(得分:3)

足以返回对现有对象的引用以实现此效果:

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而不是引用,或者根据您的用例返回const引用)。 您还可以将引用(或值)返回给另一个类的对象:

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

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

B().MakeA().DoSomething();