gpt4 book ai didi

c++ - result_of,make_tuple,参数包

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:26 25 4
gpt4 key购买 nike

我想获得 std::make_tuple 为给定参数包返回的类型。到目前为止,我已经编写了以下代码:

#include <tuple>
#include <functional>

template <class T>
struct unwrap_refwrapper
{
using type = T;
};

template <class T>
struct unwrap_refwrapper<std::reference_wrapper<T>>
{
using type = T&;
};

template <class T>
using special_decay_t = typename unwrap_refwrapper<typename std::decay<T>::type>::type;

template<class ... Types>
struct foo
{
typedef std::tuple<special_decay_t<Types>...> tuple_t;
};

int main()
{
short s;
// t should be std::tuple<int, double&, short&>
typedef foo<int, double&, decltype(std::ref(s))>::tuple_t t;
}

但我发现复制 possible implementation of std::make_tuple 的一部分非常难看,我在这里做的。

我想使用 std::result_of 或类似的东西来实现给定的效果。

我的尝试如下所示:

#include <tuple>
#include <functional>

template<class ... Types>
struct foo
{
typedef typename std::result_of<
std::make_tuple(Types...)>::type tuple_t;
};

int main()
{
short s;
// t should be std::tuple<int, double&, short&>
typedef foo<int, double&, decltype(std::ref(s))>::tuple_t t;
}

但确实如此 not compile .

如何实现?

最佳答案

template<class... Ts>
struct foo
{
using tuple_t = decltype(std::make_tuple(std::declval<Ts>()...));
};

关于c++ - result_of,make_tuple,参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42001013/

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