假设我有一个函数应该采用与元组类型相匹配的参数,我可以像这样写:
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)
{
}
但实际上这与int
和float
作为参数实际上是不同的,它采用所有类型的参数,然后将它们限制为仅允许匹配类型。我怎么能够以这样的方式解包元组,使得函数实际上将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);