我不太了解如何制作这样的类/结构:

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/

10-12 01:28