返回模板化依赖类型
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
,其中包含来自两个 SizedArray
s
的元素
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 类型,它是函数参数的依赖类型的总和?
SizeA
和 SizeB
是 typename
,而不是函数声明中的 int
。您显然不能添加类型,但是如果您将函数的模板参数声明为 int
,事情就会起作用。
假设我为大小数组创建了一个模板:
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
,其中包含来自两个 SizedArray
s
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 类型,它是函数参数的依赖类型的总和?
SizeA
和 SizeB
是 typename
,而不是函数声明中的 int
。您显然不能添加类型,但是如果您将函数的模板参数声明为 int
,事情就会起作用。