2

有一个类测试:

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

我可以要求一个代码示例吗?谢谢你的帮助。

4

1 回答 1

3

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

int * a;
float * b;

b = a;

即使 afloat可以从 an 赋值int指针 tofloat也不能从指向 的指针赋值int

尝试*a2 = b2*a2 = *b2代替 - 您的运营商应该抓住这两个。

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

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

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

于 2012-08-01T19:23:05.843 回答