gpt4 book ai didi

c++ - 模板化类型转换运算符 =

转载 作者:行者123 更新时间:2023-11-30 01:46:22 25 4
gpt4 key购买 nike

我正在尝试将 R 类型 T 转换为 R 类型 S,反之亦然。 operator = 转换可以通过简单的赋值工作,但是当它尝试在初始化程序中使用它时,它会失败。为什么?

#include <array>

template<class T>
class Rectangle
{
public :

Rectangle(T l, T t, T r, T b) : x1(l), y1(t), x2(r), y2(b)
{

}

template<class S>
Rectangle<T> & operator = (Rectangle<S> const & o)
{
x1 = static_cast<T>(o.x1);
y1 = static_cast<T>(o.y1);
x2 = static_cast<T>(o.x2);
y2 = static_cast<T>(o.y2);

return *this;
}

T x1, y1, x2, y2;
};

int main(void)
{
auto foo = Rectangle<float>(1.0f, 2.0f, 3.0f, 4.0f);
auto bar = Rectangle<double>(1.0, 2.0, 3.0, 4.0);

{
foo = bar; // Converts, ok.
}

{
auto arr = std::array<Rectangle<float>, 2>() = {{
foo,
bar // Error - no appropriate default constuctor
}};
}

return 0;
}

编辑:我使用的是 Visual Studio 2013。

最佳答案

这里有两个问题。第一:

auto arr = std::array<Rectangle<float>, 2>() = ...

Rectangle<T>不可默认构造,所以 ()不会工作。给出第二个=无论如何,我怀疑这只是一个错字。一旦你解决了这个问题:

    auto arr = std::array<Rectangle<float>, 2>{{ 
foo,
bar // Still error
}};

现在,您有一个赋值运算符,但我们不是在赋值。我们正在 build 。所以你需要的是一个构造函数:

template <class S>
Rectangle(Rectangle<S> const& o)
: x1(o.x1)
, y1(o.y1)
, x2(o.x2)
, y2(o.y2)
{ }

关于c++ - 模板化类型转换运算符 =,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33304775/

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