C++ 在C+中解包C样式数组和参数包+;

C++ 在C+中解包C样式数组和参数包+;,c++,variadic-templates,C++,Variadic Templates,我的问题有点类似于:我正在使用C++14,我正在尝试“解包”一个C风格的数组,并用它的内容调用一个函数。区别在于,我需要在可变函数模板中这样做,并将数组的每个元素传递到依赖于类型参数包的内容中 以下是简化代码: 模板 结构转换器{ 静态T转换(常量字符*){ ... } }; 模板 void myfunction(void(*f)(T…),char*args[]{ f(Converter::convert(args[i])…);//这是不正确的,但说明了这个想法 } myfunction此处获

我的问题有点类似于:我正在使用C++14,我正在尝试“解包”一个C风格的数组,并用它的内容调用一个函数。区别在于,我需要在可变函数模板中这样做,并将数组的每个元素传递到依赖于类型参数包的内容中

以下是简化代码:

模板
结构转换器{
静态T转换(常量字符*){
...
}
};
模板
void myfunction(void(*f)(T…),char*args[]{
f(Converter::convert(args[i])…);//这是不正确的,但说明了这个想法
}
myfunction
此处获取指向函数
f
的指针,该函数接受任意数量的T1类型参数。。。Tn.
args
数组的每个元素在传递到
f
之前都应转换为相应的类型


如何在C++14中做到这一点?

这里有一个解决方案,它创建了一个编译时整数序列,您可以使用它来索引
args

template<typename ...T, size_t ...I>
void myfunction_impl(void(*f)(T...), char const* args[], std::index_sequence<I...>) {
    f(Converter<T>::convert(args[I])...); 
}

template<typename ... T, size_t N>
void myfunction(void(*f)(T...), char const *(&args)[N]) {
    static_assert(N == sizeof...(T), "");
    myfunction_impl(f, args, std::index_sequence_for<T...>());
}
模板
void myfunction_impl(void(*f)(T..),char const*args[],std::index_序列){
f(Converter::convert(args[I])…);
}
模板
void myfunction(void(*f)(T…),char const*(&args)[N]){
静态断言(N==sizeof…(T),“”);
myfunction_impl(f,args,std::index_sequence_for());
}
这是一个例子


这还使用传入的数组的大小来断言它等于传入的函数的参数数。

下面是一个创建编译时整数序列的解决方案,您可以使用它来索引
args

template<typename ...T, size_t ...I>
void myfunction_impl(void(*f)(T...), char const* args[], std::index_sequence<I...>) {
    f(Converter<T>::convert(args[I])...); 
}

template<typename ... T, size_t N>
void myfunction(void(*f)(T...), char const *(&args)[N]) {
    static_assert(N == sizeof...(T), "");
    myfunction_impl(f, args, std::index_sequence_for<T...>());
}
模板
void myfunction_impl(void(*f)(T..),char const*args[],std::index_序列){
f(Converter::convert(args[I])…);
}
模板
void myfunction(void(*f)(T…),char const*(&args)[N]){
静态断言(N==sizeof…(T),“”);
myfunction_impl(f,args,std::index_sequence_for());
}
这是一个例子

这还使用传入的数组的大小来
static\u断言它等于传入的函数的参数数