gpt4 book ai didi

c++ - 将 std::tuple 转换为 T

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:57 26 4
gpt4 key购买 nike

所以我得到了一个 std::tuple<T...> ,我想创建一个接受 T... 的函数指针,目前这就是我所拥有的;

template<typename... Arguments>
using FunctionPointer = void (*)(Arguments...);

using FunctionPtr = FunctionPointer<typename std::tuple_element<0, V>::type,
typename std::tuple_element<1, V>::type,
typename std::tuple_element<2, V>::type>;

但是,如果不手动输入 0, ..., tuple_size<V>::value 中的每个索引,我似乎无法找到执行此操作的方法。 . FunctionPtr 在上下文中定义,其中 V=std::tuple<T...> (也已经有一个可变参数模板(因此我不能直接传递 T...))

我想我需要生成一些索引列表,并使用一些黑魔法..

最佳答案

这是一个可能的解决方案:

#include <tuple>

// This is what you already have...
template<typename... Arguments>
using FunctionPointer = void (*)(Arguments...);

// Some new machinery the end user does not need to no about
namespace detail
{
template<typename>
struct from_tuple { };

template<typename... Ts>
struct from_tuple<std::tuple<Ts...>>
{
using FunctionPtr = FunctionPointer<Ts...>;
};
}

//=================================================================
// This is how your original alias template ends up being rewritten
//=================================================================
template<typename T>
using FunctionPtr = typename detail::from_tuple<T>::FunctionPtr;

下面是您将如何使用它:

// Some function to test if the alias template works correctly
void foo(int, double, bool) { }

int main()
{
// Given a tuple type...
using my_tuple = std::tuple<int, double, bool>;

// Retrieve the associated function pointer type...
using my_fxn_ptr = FunctionPtr<my_tuple>; // <== This should be what you want

// And verify the function pointer type is correct!
my_fxn_ptr ptr = &foo;
}

关于c++ - 将 std::tuple<T...> 转换为 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270032/

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