gpt4 book ai didi

c++ - 将元组转换为函数参数

转载 作者:太空狗 更新时间:2023-10-29 21:37:37 24 4
gpt4 key购买 nike

template<typename... Args>
class SomeClass
{
using tuple_type = std::tuple<Args...>; // (ie: <bool,int,bool>)
tuple_type mytuple;
};

template<typename T, typename C, typename... I> // T is SomeClass
class SomeOtherClass
{

void fn(void(C::*f)(bool,int,bool)); // I want this
// based on the T::tuple_type but I'm not sure how.

};

如果我知道元组只有 3 个元素,我可以简单地使用 tuple_element 3 次,但我不知道。

最佳答案

写一个泛型类型特征:

template <class C, class F>
struct mem_ptr;

template <class C, class F>
using mem_ptr_t = typename mem_ptr<C, F>::type;

并将其专门用于元组:

template <class C, class... Args>
struct mem_ptr<C, std::tuple<Args...>> {
using type = void (C::*)(Args...);
};

然后使用它:

void fun(mem_ptr_t<C, typename T::tuple_type> f);

这里假定您希望将 void 作为返回类型。


可以将其概括为将 mem_ptr 部分从元组拆分为 func 部分:

template <class C, class F>
struct mem_ptr {
using type = F C::*;
};

template <class C, class F>
using mem_ptr_t = typename mem_ptr<C, F>::type;

template <class R, class T>
struct tuple_to_func;

template <class R, class... Args>
struct tuple_to_func<R, std::tuple<Args...>> {
using type = R(Args...);
};

template <class R, class T>
using tuple_to_func_t = typename tuple_to_func<R, T>::type;

在这种情况下你会想要:

void fun(mem_ptr_t<C,
tuple_to_func_t<void, typename T::tuple_type>
> f);

关于c++ - 将元组转换为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37077725/

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