gpt4 book ai didi

C++ 问题 : Class Promotion using derived class

转载 作者:太空狗 更新时间:2023-10-29 21:50:16 25 4
gpt4 key购买 nike

我有一个派生自 Float32_base 的 Float32 类

    class Float32_base {        public:        // Constructors        Float32_base(float x) : value(x) {};        Float32_base(void) : value(0) {};        operator float32(void) {return value;};        Float32_base operator =(float x) {value = x; return *this;};        Float32_base operator +(float x) const { return value + x;};    protected:        float value;    }    class Float32 : public Float32_base {        public:        float Tad() {            return value + .01;        }    }    int main() {        Float32 x, y, z;        x = 1; y = 2;    // WILL NOT COMPILE!        z = (x + y).Tad();     // COMPILES OK        z = ((Float32)(x + y)).Tad();     }

问题是 + 运算符返回 Float32_base 而 Tad() 不在该类中。但是 'x' 和 'y' 是 Fl​​oat32 的。

有没有一种方法可以让第一行中的代码进行编译,而不必像在下一行中那样求助于类型转换?

最佳答案

您可以使用 CRTP如果你只需要一层深度继承:

template <typename T>
struct A
{
T
operator+ (const A&)
{ return T (); }
};

struct B : A <B>
{
void
lol ()
{ }
};

int
main ()
{
B a, b;
(a + b).lol ();
}

关于C++ 问题 : Class Promotion using derived class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474833/

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