c++ - 有没有办法用一行在同一个对象上调用多个函数?

标签 c++ method-chaining syntactic-sugar function-calls member-functions

只是想整理一个程序,想知道是否有人可以给我一些关于在同一行上多次调用一个队列上的成员函数的语法糖。

例如,改变:

queue<int> q;
q.push(0);
q.push(1);

类似于:

q.(push(0), push(1));
//or
q.push(0).push(1);

我知道这看起来有点荒谬,而且不实用。但是,如果我想缩短这样的一小部分代码,是否可以选择这样做?从我目前所读的内容来看,只有当函数具有非 void 返回值时,才可能链接方法。

当然,这是一个选项:

q.push(0); q.push(1);

但我试图避免 q 出现两次。再次......语法糖:)

这里的目标不是初始化,而是压缩一个对象/容器在一段代码中被调用的次数。我引用队列的原因是因为它是动态的。

最佳答案

如果你有一个可以修改的类,让函数返回一个对自身的引用:

template<typename T>
class queue {
public:
    //...
    queue& push(T data) {
        //...
        return *this; //return current instance
    }
    //...
private:
    //...
};

那你就可以了

queue<int> q;
q.push(0).push(1);

如果你不能,那么你的双手就被束缚了。您可以对类进行包装,但为了节省一些字符,这几乎不值得。

在您使用 push 的情况下,您可以这样做:

queue<int> q = { 0, 1 };

但这显然只适用于 push,因为队列将在 2 次 push 之后包含 01

关于c++ - 有没有办法用一行在同一个对象上调用多个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39838716/

相关文章:

c++ - 这个特定的结构如何发挥这样的作用? (arcsynthesis现代3D图形编程)

c++ - 在嵌入式 Linux 平台上使用 std::string 时出现段错误

c++ - 为什么我的 vector<int> 不默认为 0?

c++ - 为什么 Qt 有标准 C++ 对象(例如 QVector、QString 等)的 'Q' 版本?

c++ - 默认构造函数 C++

.net - 在链式 XElement 轴方法中处理空引用的优雅方式

javascript - 如何在我的 Javascript 库中添加语法糖?

javascript - 如何重绘图表: d3. js链接函数和crossfilter过滤

PHP:链接方法调用

Python 断言——改进了失败的自省(introspection)?