我不太了解如何制作这样的类/结构:
std::stringstream ss;
ss.str().c_str();
我想做类似这样的事,例如:
int result = MyAssignFunction(10, 5).AddParametrs();
// or
int result = MyAssignFunction(10, 5).FirstParametr;
我不能说这就是为什么我找不到任何提示。
主要的问题是,是否可能?请给我任何提示。
最佳答案
函数MyAssignFunction
需要返回具有AddParametrs
成员函数或FirstParametr
成员变量的对象。
但是,您需要知道示例中MyAssignFunction
返回的对象是临时的。一旦表达式结束,它将被销毁。
一个非常的简单示例:
#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';
}
上面的小虚拟程序将打印
操作= 9
执行“魔术”的表达式是
S(0).add1().add2().add1().addN(5).get()
。它首先创建结构S
的(临时)对象,并将0
传递给构造函数。然后,在该对象上调用成员函数add1
,该函数返回对自身的引用,在该引用上我们调用add2
,依此类推。最后,我们调用成员函数get
以获得最终值并将其输出。如您所见,我们可以按任意顺序链接任意数量的函数调用。
上面只是一个非常简单的示例,它允许对象对自身进行调用链接。成员函数可以返回另一个对象(或对它的引用),然后可以将调用链接到该对象的成员函数。这就是在
stringstream
示例中看到的内容:str
函数返回一个std::string
对象,然后在该c_str
对象上调用std::string
。关于c++ - 过载类还是?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23065272/