gpt4 book ai didi

c++ - 返回对 C++11 中复数的实数或虚数值的引用的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:25 24 4
gpt4 key购买 nike

我正在寻找一个函数,该函数返回对 C++11 中复数的实数或虚数值的引用。在 C++03 中我可以说:

complex<double> C; cin >> C.real();

但在 C++11 中,由于 C.real() 返回的值不是引用,因此会出现编译错误。

我发现我可以这样写:

double t; cin >> t; C.real(t);

但这并不简单,例如,如果我想将 c 的实数部分乘以 2 并将其乘以 1,我应该说:

C.real(2*C.real() + 1);

那不干净。

还有其他[干净]的方法吗?

最佳答案

如果您真的想将复数的实部和虚部的输入分开,您可以尝试 IO 操纵器方法。

#include <complex>
#include <iosfwd>

class proxy_complex {
explicit proxy_complex(std::istream& strm, bool f)
: strm_(&strm), flag(f) { }
proxy_complex(const proxy_complex&) = default;

std::istream* strm_;
bool flag; // flag to check whether we're writing real or imag

public:
template<typename T>
std::istream& operator>>(std::complex<T>& c)
{
T n;
if (*strm_ >> n)
flag ? c.real(n) : c.imag(n);
return *strm_;
}

friend proxy_complex operator>>(std::istream& is, proxy_complex(*func)(std::istream&))
{
return func(is);
}
friend proxy_complex real(std::istream&);
friend proxy_complex imag(std::istream&);
};

inline proxy_complex real(std::istream& is)
{
return proxy_complex(is, true);
}

inline proxy_complex imag(std::istream& is)
{
return proxy_complex(is, false);
}

您可以将上述代码放在它自己的头文件中(如果这样做,最好将其包装在命名空间中)。

用法:

#include <iostream>
#include "my_header.h"

int main()
{
std::complex<double> c;
std::cin >> real >> c >> imag >> c;
if (std::cin) std::cout << c;
}

希望我猜对了你对“干净”的定义:)

关于c++ - 返回对 C++11 中复数的实数或虚数值的引用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19175776/

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