有一个课程测试:
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
我可以要求代码示例吗? 谢谢你的帮助。
答案 0 :(得分:3)
第二个示例不起作用,因为您没有将分配给对象,而是将分配给指针。这不起作用的原因相同:
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
。我建议完全消除赋值运算符的这个重载,因为它必然比它有用更容易混淆。