gpt4 book ai didi

C++、带参数的模板、重新定义的运算符 = 和指针赋值

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:59 26 4
gpt4 key购买 nike

有一个类测试:

typedef enum
{
AA, BB
} TType;

template <typename T>
struct TVector
{
typedef std::vector <T> Type;
};

template < typename T, const TType type >
class Test
{
private:
typename TVector <T>::Type it;
};

及其使用重新定义的运算符 = 的特化(没有附加功能):

template < typename T, const TType type >
class Test <T *, type>
{
public:
Test <T *, type > & operator = ( const Test <T*, type > &source ) {return *this;}

template <TType type2>
Test <T *, type > & operator = ( const Test <T*, type2 > &source ){return *this;}

template <TType type2>
Test <T *, type > * operator = ( const Test <T*, type2 > *source ) {return *this;}
};

我正在尝试为彼此分配具有不同 TType 参数的对象,并且此步骤工作正常。

int _tmain(int argc, _TCHAR* argv[])
{
Test <double *, AA> a1;
Test <double *, BB> b1;

a1=b1; //Correct

Test <double *, AA> *a2;
Test <double *, BB> *b2;

a2 = b2; //Error

return 0;
}

但是用指针同样的步骤不行,看错误码:

Error   1   error C2440: '=' : cannot convert from 'Test<T,type> *' to 'Test<T,type> *' 49

是否可以为具有不同 TType 参数的指针分配彼此(如何?)?

更新的问题:

那么指针和对象之间的赋值呢?

a2 = &b1;  //Error
*a2 = b1; //Unitialized memory

我可以索取代码示例吗?感谢您的帮助。

最佳答案

第二个示例不起作用,因为您没有将分配给对象,而是将分配给指针。这是行不通的原因:

int * a;
float * b;

b = a;

即使 float 可以从 int 赋值,指向 float 的指针不能从指向 int.

试试 *a2 = b2*a2 = *b2 —— 你的运营商应该捕获这两个。

另请注意,此实现似乎是错误的:

template <TType type2>
Test <T *, type > * operator = ( const Test <T*, type2 > *source )
{
return *this;
}

this隐式变量已经是指针类型,所以需要return this,而不是return *this。我建议完全消除赋值运算符的这种重载,因为它必然会造成更多困惑而不是有用。

关于C++、带参数的模板、重新定义的运算符 = 和指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766034/

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