Допустим, я создаю шаблон для массивного размера:
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
}
Тем не менее, когда я пытаюсь скомпилировать этот код, я получаю сообщение об ошибке «Аргумент шаблона 1 недействителен» (предположительно из-за SizeA + SizeB
часть типа возврата). Есть ли способ создать зависимый тип возврата, который является суммой зависимых типов аргументов функции?
SizeA
а также SizeB
являются typename
с не int
s в объявлении вашей функции. Вы, очевидно, не можете добавлять типы, но если вы объявите параметры шаблона функции как int
все будет работать.
Других решений пока нет …