C ++元组类型到函数参数类型

问题描述 投票:1回答:1

假设我有一个函数应该采用与元组类型相匹配的参数,我可以像这样写:

using ArgsTuple = std::tuple<int, float>;

template<typename... Args, 
    class = typename std::enable_if<std::is_convertible<std::tuple<Args...>, ArgsTuple>::value>::type>
void function(Args... args)
{
}

但实际上这与intfloat作为参数实际上是不同的,它采用所有类型的参数,然后将它们限制为仅允许匹配类型。我怎么能够以这样的方式解包元组,使得函数实际上将ArgsTuple中的类型作为参数,以便例如visual studio能够自动完成调用函数所需的类型。结果函数必须是自由函数。

c++ tuples variadic-templates sfinae
1个回答
2
投票

不确定你想要什么,而不是一个自由函数(但模板类中的静态方法),但我想你要求的东西类似于以下

template <typename>
struct proFunc;

template <template <typename ...> class C, typename ... Ts>
struct proFunc<C<Ts...>>
 {
   static void func (Ts ...)
    { }
 };

你可以用这种方式

using ArgsTuple = std::tuple<int, float>;

proFunc<ArgsTuple>::func(1, 2.f);

你也可以验证一下

static_assert( std::is_same<decltype(&proFunc<ArgsTuple>::func),
                            void(*)(int, float)>::value, "!" );

要获得更类似于自由函数的东西,可以使用函数指针

auto  funcPnt = &proFunc<ArgsTuple>::func;

funcPnt(3, 4.f);
© www.soinside.com 2019 - 2024. All rights reserved.