我正在实现两个模板类,其中任何一个类都应该有另一个类的赋值运算符:
// prototype of template B
template<uint32_t nQ> class B;
// template A
template<uint32_t nQ> class A
{
public:
A<nQ>& operator = ( const B<nQ>& b );
};
// template B
template<uint32_t nQ> class B
{
public:
B<nQ>& operator = ( const A<nQ>& a ) { ... }
};
// Operator = for class A
template<uint32_t nQ>
A<nQ>& A<nQ>::operator = ( const B<nQ> b ) { ... }
到目前为止,这么好。完美的工作。但是现在我想为nQ的不同值赋予赋值运算符。虽然在模板B中没有问题,但我无法使其适用于模板A:
// prototype of template B
template<uint32_t nQ> class B;
// template A
template<uint32_t nQ> class A
{
public:
A<nQ>& operator = ( const B<nQ>& b );
};
// template B
template<uint32_t nQ> class B
{
public:
B<nQ>& operator = ( const A<nQ>& a ) { ... }
/*
* I want to have this operator in template A as well
*/
template<uint32_t otherQ>
B<nQ>& operator = ( const A<otherQ>& ) { ... }
};
// Operator = for class A
template<uint32_t nQ>
A<nQ>& A<nQ>::operator = ( const B<nQ>& b ) { ... }
不幸的是,operator =无法实现为友元函数。我已经尝试了几乎所有的东西,但我没有完成它。 作为一个重要信息:我在自制的嵌入式硬件(STM32 + IAR Embedded Workbench)上使用C ++ 14编译器。 我非常感谢这里的帮助。
谢谢,蒂姆
答案 0 :(得分:2)
以下应该有效:
// prototype of template B
template<uint32_t nQ> class B;
// template A
template<uint32_t nQ> class A
{
public:
template <uint32_t OthernQ>
A<nQ>& operator = ( const B<OthernQ>& b );
};
// template B
template<uint32_t nQ> class B
{
public:
B<nQ>& operator = ( const A<nQ>& a ) { ... }
template<uint32_t otherQ>
B<nQ>& operator = ( const A<otherQ>& ) { ... }
};
// Operator = for class A
template <uint32_t nQ>
template <uint32_t OthernQ>
A<nQ>& A<nQ>::operator = ( const B<OthernQ>& b ) { ... }
类模板中方法模板的语法需要2 template
。