gpt4 book ai didi

c++ - 如何在 C++ 中自动生成 operator=?

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:32 25 4
gpt4 key购买 nike

我有以下模板结构:

 template<class T> struct S {
T a,b,c,d,e,f,g,h;
};

然后我尝试这样做:

S<double> sDouble;
S<float> sFloat;

sDouble = sFloat; //Compile error here, since sDouble and sFloat have «unrelated» types

我该怎么办?我有很多这样的结构,其中有很多数据成员。我厌倦了为每个结构提供自定义模板化 operator= 只是后来发现我忘记分配一些成员。

附言上面的情况和下面的代码很不一致,可以通过编译:

template<class T> using V = T; 

int main()
{
V<double> vDouble;
V<float> vFloat;

vDouble = vFloat; //Can be compiled

return 0;
}

最佳答案

编译器无法为两种不同类型隐式生成赋值运算符。您需要明确定义它。例如

template<class T> struct S 
{
T a,b,c,d,e,f,g,h;

template <class U>
S<T> & operator =( const S<U> &s )
{
a = T( s.a );
b = T( s.b );
c = T( s.c );
d = T( s.d );
e = T( s.e );
f = T( s.f );
g = T( s.g );
h = T( s.h );

return *this;
}
};

关于c++ - 如何在 C++ 中自动生成 operator=?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427136/

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