实际上我需要知道这条线是如何被执行的。
示例:
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”使用不同的类,或者我们需要将它们作为同一类的“函数”来实现。
如何处理序列调用?
答案 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();