如何正确地从函数 (type_traits) 给出向量

How correctly give vector from function (type_traits)

本文关键字:traits 向量 type 正确地 函数      更新时间:2023-10-16

如何从此operator+()返回std::vector

#include <iostream>
#include <vector>
#include <type_traits>
#include <algorithm>
#include <utility>
template<typename> struct is_std_vector :  std::false_type {};
template<typename T, typename A> struct is_std_vector<std::vector<T, A>> :  std::true_type {};
template <typename T>
std::enable_if_t<is_std_vector<std::decay_t<T>>::value>
operator+(T&& vec1, T&& vec2)
{
for (int i = 0; i < vec2.size(); ++i)
vec1.emplace_back(std::forward<int>(vec2.at(i)));
return vec1;
}
int main()
{
std::vector<int> vec1{ 1,2,3,4,5 };
std::vector<int> vec2{ 2,3,4,5,6 };
std::vector<int> vecResult;
vecResult = std::move(vec1) + std::move(vec2);
for (const auto& itr : vecResult)
std::cout << itr << std::endl;
return 0;
}

现在函数返回 void,但我不知道为什么,我想给std::vector作为对operator+(T&& vec1, T&& vec2)的前向引用并返回std::vector。我认为这很好,但编译器知道得更好。一些建议?

错误编译器

C2679 二进制 '=':未找到采用右操作数的运算符 类型为"无效"(或没有可接受的转换(

问题是std::enable_if_t的默认类型是 ,当条件为 true 时,是void

所以,而不是返回void

std::enable_if_t<is_std_vector<std::decay_t<T>>::value>
operator+(T&& vec1, T&& vec2)

我想你应该返回T或类似的东西

std::enable_if_t<is_std_vector<std::decay_t<T>>::value, T>
operator+(T&& vec1, T&& vec2)