如何将3个功能合二为一?

How to combine 3 functions into one?

本文关键字:合二为一 功能 3个      更新时间:2023-10-16

我需要将所有内容组合在一起,但我不知道如何,甚至没有提示如何做到这一点。

如果这是不可能的,请写一个答案,这样我就不会寻找实现它的方法。

template <class T1, class T2, class T3>
auto vector_ptr(T1& size, T2& size2, T3& size3) {
auto result = make_shared<vector<vector<vector<int64_t>>>>(size, vector<vector<int64_t>>(size2, vector<int64_t>(size3)));
return *result;
}
template <class T1, class T2>
auto vector_ptr(T1& size, T2& size2) {
auto result = make_shared<vector<vector<int64_t>>>(size, vector<int64_t>(size2));
return *result;
}
template <class T1>
auto vector_ptr(T1& size) {
auto result = make_shared<vector<int64_t>>(size);
return *result;
}

主要

auto v_arr3 = vector_ptr(size3, size2, size);
auto v_arr2 = vector_ptr(size2, size);
auto v_arr1 = vector_ptr(size);

等等,如有必要。

auto v_arr4 = vector_ptr(size4, size3, size2, size);
#include <memory>
#include <type_traits>
#include <vector>
template<class T, class Head>
auto
make_vector(Head size)
{
return std::vector<T>(size);
}
template<class T, class Head, class ...Args,
std::enable_if_t<(sizeof...(Args) > 0), int> = 0>
auto
make_vector(Head size, Args... args)
{
return std::vector(size, make_vector<T, Args...>(args...));
}
template<class T, class ...Args>
auto
vector_ptr(Args... args)
{
using vector_type = decltype(make_vector<T>(args...));
return std::make_shared<vector_type>(make_vector<T>(args...));
}

std::vector扣除指南需要c++17,但可以通过使用decltype()来避免。

make_vector可以使用if constexpr而不是SFINAE进行组合,如下所示:

template<class T, class Head, class ...Args>
auto
make_vector(Head size, Args... args)
{
if constexpr (sizeof...(Args) > 0)
return std::vector(size, make_vector<T, Args...>(args...));
else
return std::vector<T>(size);
}