我不太了解如何制作类似这样的课程/结构:
std::stringstream ss;
ss.str().c_str();
我想做类似的事情,例如:
int result = MyAssignFunction(10, 5).AddParametrs();
// or
int result = MyAssignFunction(10, 5).FirstParametr;
我不能说出这就是为什么我找不到任何提示。 主要问题是甚至可能吗?请给我任何提示。
答案 0 :(得分:3)
函数MyAssignFunction
需要返回一个具有AddParametrs
成员函数或FirstParametr
成员变量的对象。
但您需要注意示例中MyAssignFunction
返回的对象是 temporary 。一旦表达式结束,它就会被破坏。
非常 简单 示例:
#include <iostream>
struct S
{
int value;
S(int initial) : value(initial) {}
S& add1() { value++; return *this; }
S& add2() { value += 2; return *this; }
S& addN(int n) { value += n; return *this; }
int get() const { return value; }
};
int main()
{
std::cout << "Operation = " << S(0).add1().add2().add1().addN(5).get() << '\n';
}
上面的小虚拟程序将打印
Operation = 9
执行“魔法”的表达式是S(0).add1().add2().add1().addN(5).get()
。它首先创建结构S
的(临时)对象,并将0
传递给构造函数。然后在这个对象上我们调用成员函数add1
,它返回对自身的引用,在该引用上我们调用add2
,依此类推。最后,我们调用成员函数get
来获取最终值并输出它。
如您所见,我们可以按任意顺序链接任意数量的函数调用。
以上只是一个非常简单的示例,它允许对象链接自身的调用。成员函数可以返回另一个对象(或引用),然后您可以将调用链接到该对象的成员函数。这就是您在stringstream
示例中看到的内容:str
函数返回std::string
对象,并在c_str
对象上调用std::string
。
答案 1 :(得分:0)
如果您正在寻找方法链接,这意味着您可以重用函数调用的输出,就好像它是您的函数被调用的对象一样,您需要做的就是返回{{1 }}。因此,您的返回值应该是您尝试实现方法链接的类类型。为避免不必要的复制构造函数调用,您还应该通过引用返回。这是一个小例子:
*this