c++ - 你如何实现相互转换?

标签 c++ typecasting-operator

假设您有两种结构类型,一种具有 int 成员,一种具有 float 成员。

struct i { 
    int a, b; 
    i(int a, int b): a(a), b(b) {}
};

struct f { 
    float a, b;
    f(float a, float b): a(a), b(b) {}
};

我们要定义两个转换运算符,从 if 和相反。如果我们尝试通过运算符重载来实现

struct i { 
    int a, b; 
    i(int a, int b): a(a), b(b) {}
    operator f() const { return f(a, b); };
};

struct f { 
    float a, b;
    f(float a, float b): a(a), b(b) {}
    operator i() const { return i(a, b); };
};

我们遇到声明顺序的问题,因为i需要知道f,而f需要知道i。此外,转换运算符必须在类内部声明。 f 的前向声明不起作用。

有解决办法吗?

最佳答案

前向声明工作正常:

struct i;
struct f;

struct i
{
    int a, b; 
    i(int a, int b): a(a), b(b) {}
    operator f() const;
};

struct f
{
    float a, b;
    f(float a, float b): a(a), b(b) {}
    explicit operator i() const;
};

i::operator f() const { return f(a, b); }
f::operator i() const { return i(a, b); }

关于c++ - 你如何实现相互转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57235542/

相关文章:

c++ - OpenGL 用四边形填充平截头体

C 指针转换

javascript - Sequelize - Node Js - 枚举和整数字段搜索选项

c++ - 从 int 到 long int 的类型转换

c++ - 类型转换的 C++ 指针和非类型转换指针指向相同的位置,但给出不同的值

c++ - 使用结构的隐式类型转换

c++ - 使用 floodfill c++ 填充矩形

c++ - 如何在 QT 框架的 UI 上显示一个 "*.png"文件?

c++ - 返回在 C++ 中没有 back() 方法的容器的最后一个元素?

c++ - g++ 奇怪的警告