假设您有两种结构类型,一种具有 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) {}
};
我们要定义两个转换运算符,从 i
到 f
和相反。如果我们尝试通过运算符重载来实现
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/