构建从数组到 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
的相关技术,但它们不太可能是您想要的。
您需要退后一步,看看让您希望将数据存储为元组的动机问题,然后找到不同的路径。
我想有一种方法可以根据对象在成员变量容器(例如向量)中的条目数来构建具有可变数量或条目的元组。
这是我最好的成绩。但是,不工作。我显然在 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
的相关技术,但它们不太可能是您想要的。
您需要退后一步,看看让您希望将数据存储为元组的动机问题,然后找到不同的路径。