C 元组类型用于功能参数类型



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

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可以自动完成调用该功能所需的类型。结果功能必须是一个免费的函数。

不确定要了解您想要什么,而不是完全免费的功能(而是模板类中的静态方法),但是我想您正在要求与类似的东西遵循

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);

最新更新