gpt4 book ai didi

c++ - 如何正确地从函数中给出 vector (type_traits)

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:45 26 4
gpt4 key购买 nike

如何从此 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 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)

关于c++ - 如何正确地从函数中给出 vector (type_traits),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44991870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com