构建从数组到 return 的可变元组

Build variadic tuple from array to return

我想有一种方法可以根据对象在成员变量容器(例如向量)中的条目数来构建具有可变数量或条目的元组。

这是我最好的成绩。但是,不工作。我显然在 return 值构造中遗漏了一些东西。假设 m_values 是一个容器,其中包含我想放入元组的值和 return.

template<typename... T>
std::tuple<T...> getValuesTuple()
{
    if (m_values[0].isValid())
    {
        return buildReturnTuple(0);
    }
    return std::tuple<T...>();
}

template<typename... T>
std::tuple<T...> buildReturnTuple(size_t i)
{
    if (i + 1 < MAX_VALUES && m_values[i + 1].isValid())
    {
        return std::tuple<T, T...>(m_values[i], buildReturnTuple(i + 1));
    }

    return std::tuple<T...>(m_values[i]...);
}

提前致谢!

如果你在编译时知道数组的大小,可以这样来完成:


#include <array>
#include <tuple>
#include <utility>

struct MyType {};

constexpr auto my_type_to_any_other_type(const MyType&) {
    // use if constexpr to return desired types
    return 0;
}

template<std::size_t N, std::size_t... Idx>
constexpr auto array_to_tuple_helper(const std::array<MyType, N>& a, std::index_sequence<Idx...>) {
    return std::make_tuple(my_type_to_any_other_type(a[Idx])...);
}

template<std::size_t N>
constexpr auto array_to_tuple(const std::array<MyType, N>& a) {
    return array_to_tuple_helper(a, std::make_index_sequence<N>{});
}

int main () {
    auto t = array_to_tuple(std::array<MyType, 1>{ MyType{} });
    return 0;
}

C++中的变量类型是一个编译期属性。

函数类型returns是编译时属性。

无法完成您要求的操作,因为 2 元素元组与 3 元素元组的类型不同。

有基于 std::variant 甚至 std::any 的相关技术,但它们不太可能是您想要的。

您需要退后一步,看看让您希望将数据存储为元组的动机问题,然后找到不同的路径。