返回模板化依赖类型

Returning templated dependent types

假设我为大小数组创建了一个模板:

template <int Size>
class SizedArray {
   private:
      std::vector<int> array_;
   public:
      SizedArray() {
         for (int i = 0; i < Size; ++i) {
            array_.push_back(0);
         }
      }
      ... // other methods
};

我想定义一个新函数 merge,它会创建一个新的 SizedArray,其中包含来自两个 SizedArrays

的元素
template<typename SizeA, typename SizeB>      
SizedArray<SizeA + SizeB> merge(SizedArray<SizeA> a, SizedArray<SizeB> b) {
   // additional code
}

然而,当我尝试编译这段代码时,我收到一条错误消息 "template argument 1 is invalid"(可能是因为 return 类型的 SizeA + SizeB 部分)。有没有办法创建依赖 return 类型,它是函数参数的依赖类型的总和?

SizeASizeBtypename,而不是函数声明中的 int。您显然不能添加类型,但是如果您将函数的模板参数声明为 int,事情就会起作用。