gpt4 book ai didi

c++ - 运算符重载链接

转载 作者:行者123 更新时间:2023-11-28 03:56:03 24 4
gpt4 key购买 nike

我想重载 << 运算符以进行如下链接

function1(param1, param2)<< obj2 << obj3 << string4

function1 将返回一个对象。

我想做的是在 string4 之后,我需要调用一个使用 param1,param2 的函数。

我的问题是

  1. 我怎么知道 string4 是表达式中的最后一个参数,因此我需要使用 param1 和 param2 调用另一个 function2,否则不可能这样做?

  2. 如何将 param1 和 param2 传递给要调用的函数?我无法将 param1 和 param2 存储在对象中,因为它是多线程的。

谢谢。

最佳答案

您可以从 function1 按值返回一个辅助对象,该对象在其析构函数中调用 function2

考虑这个例子:

#include <iostream>

using namespace std;

void function2( int i, int j ) {
cout << "function2 called with " << i << " and " << j << endl;
}

struct Function2Caller {
Function2Caller( int param1, int param2 ) : m_param1( param1 ), m_param2( param2 ) {}
~Function2Caller() { function2( m_param1, m_param2 ); }

int m_param1, m_param2;
};

Function2Caller &operator<<( Function2Caller &obj, int x ) {
cout << "Streaming " << x << endl;
return obj;
}

Function2Caller function1( int i, int j ) {
cout << "function1 called with " << i << " and " << j << endl;
return Function2Caller( i, j );
}

int main() {
function1( 2, 3 ) << 4 << 6;
}

这个程序打印

function1 called with 2 and 3Streaming 4Streaming 6function2 called with 2 and 3

想法是,在您的行尾,Function2Caller 对象超出范围,然后析构函数开始工作。

请注意,在实现此功能时,您可能应该禁止复制 Function2Caller 对象,并使 function1 成为唯一可以调用 Function2Caller 构造函数的对象。

关于c++ - 运算符重载链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3599018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com