gpt4 book ai didi

c++ - 我将如何实现一个函数来提取此类的元素?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:28 32 4
gpt4 key购买 nike

为了好玩,我一直在用 C++ 实现元组,但我一直坚持自己的想法,给定下面的类对其进行修改,以便我可以轻松地通过使用模板仅使用索引来提取每个元素。类似于 std::get。

TL;DR:用于提取元组内元素的实现会是什么样子?

template<typename first_t, typename ... arg_v>
class Tuple : public Tuple<arg_v ...>
{
public:

Tuple()
{
}

Tuple(const first_t&& A) :
element(A)
{
}

Tuple(const first_t& A, arg_v& ... args) :
element(A), Tuple<arg_v ...>::Tuple(args ...)
{
}

Tuple(const first_t&& A, arg_v&& ... args) :
element(A), Tuple<arg_v ...>::Tuple(args ...)
{
}

first_t element;
};

template<typename last_t>
class Tuple<last_t>
{
public:
Tuple()
{
}

Tuple(const last_t& A) :
element(A)
{
}

Tuple(const last_t&& A) :
element(A)
{
}
last_t element;
};

最佳答案

我使用了递归方法。我知道指向 void 的指针是邪恶的,但我们不知道将返回哪种类型,只有使用代码的人知道;转换为我们想要的类型将仅由最后一个 get 执行。

请记住,此代码将在不进行任何检查的情况下将 void* 转换为您想要的内容。

class Tuple : public Tuple<arg_v ...>
{
template<typename T>
void get(int index, T& out)
{
out = *static_cast<T*>(get(index));
}

void* get(unsigned int index)
{
if (index == 0)
return &element;
else
return Tuple<arg_v ...>::get(index - 1);
}
};
class Tuple<last_t>
{
void* get(unsigned int)
{
return &element;
}
};

关于c++ - 我将如何实现一个函数来提取此类的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37123397/

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