当非类型参数值在运行时已知时,声明模板化类对象:运算符+模板化类中的重载



我想创建一个临时数组对象,数组的长度等于arr1和arr2的长度之和。我该怎么做?以下函数在类数组中声明为友元。

template<class T1, int l1>
array<T1, l1> operator +( const array<T1, l1> &arr1, const array<T1, l1> &arr2 )
{
int add= arr1.size()+ arr2.size();
array<T1, add> temp;
........
}

这里size((成员函数只是返回数据的长度。类声明为:

template<class T, int length>
class array
{
T *data{};
public:
//Overloaded assignment operator taking arr object as parameter
template<class T1, int l1>
array& operator=(const array<T1, l1> &arr_copy);
template<class T1, int l1>
friend array<T1, l1> operator +( const array<T1, l1> &arr1, const array<T1, l1> &arr2 );
....Constructors and member functions....
};

这应该在main((中起作用->

arr3 = arr1 + arr2;

有人知道该怎么办吗?这里返回类型解析程序的意义在哪里?

模板非类型参数应为constexpr值。

所以你可以做

template<class T1, int l1>
array<T1, l1 + l1> operator +( const array<T1, l1> &arr1, const array<T1, l1> &arr2 )
{
constexpr int add = l1 + l1;
array<T1, add> temp;
// ........
}

最新更新