如何正确地从函数中给出向量 (type_traits)
How correctly give vector from function (type_traits)
我如何returnstd::vector
从这个operator+()
?
#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;
}
现在函数 return 无效,但我不知道为什么,我想给 std::vector
作为对 operator+(T&& vec1, T&& vec2)
和 return std::vector
的前向引用.我认为这很好,但编译器知道得更多。有什么建议吗?
错误编译器
C2679 binary '=': no operator found which takes a right-hand operand
of type 'void' (or there is no acceptable conversion)
问题是当条件为真时 std::enable_if_t
的默认类型是 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)
我如何returnstd::vector
从这个operator+()
?
#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;
}
现在函数 return 无效,但我不知道为什么,我想给 std::vector
作为对 operator+(T&& vec1, T&& vec2)
和 return std::vector
的前向引用.我认为这很好,但编译器知道得更多。有什么建议吗?
错误编译器
C2679 binary '=': no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion)
问题是当条件为真时 std::enable_if_t
的默认类型是 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)