gpt4 book ai didi

c++ - 从std::complex 到std::complex 的类型转换

转载 作者:行者123 更新时间:2023-12-01 14:42:58 28 4
gpt4 key购买 nike

我有一个实现用户定义的算术类型的MyType类。此类提供以下转换运算符

struct MyType 
{ ...
operator double()
{
return to_double(); // This converts my type to a double value
}
... };

如下使用此类,效果很好:
double d = MyType(1);

但是,将此类用作std::complex中的类型,例如
#include <complex>
std::complex<double> c = std::complex<MyType>(1,1);

失败,并出现以下编译器错误:
error: conversion from 'std::complex<MyType>' to non-scalar type 'std::complex<double>' requested

感谢您为解决此问题提供的任何帮助。

马蒂亚斯

最佳答案

The specializations std::complex<float>, std::complex<double>, and std::complex<long double> are LiteralTypes for representing and manipulating complex numbers.

The effect of instantiating the template complex for any other type is unspecified.


所以 std::complex<MyType>是“有问题的” ...
忽略那部分,
std::complex<T> 具有泛型转换构造函数,而特化 std::complex<double>仅提供来自其他 float 复杂版本的转换。
但是 operator= 允许所有版本的通用转换(尽管只有Msvc接受 code)。
您必须提供自己的(显式/命名)转换函数:
std::complex<double> to_complex_double(std::complex<MyType>& c)
{
#if 0
std::complex<double> res;
res = c; // gcc/clang doesn't accept that.
return res;
#else
return {c.real(), c.imag()};
#endif
}

关于c++ - 从std::complex <MyType>到std::complex <double>的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61497592/

28 4 0