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

Unpack C-style array along with parameter pack in C++

我的问题有点类似于 :我正在使用 C++14,我正在尝试 "unpack" 一个 C 风格的数组,并用它的内容调用一个函数。不同之处在于,我需要在可变函数模板中执行此操作,并将数组的每个元素传递给取决于类型参数包的内容。

这里是简化的代码:

template<typename T>
struct Converter {
   static T convert(const char*) {
     ...
   }
};

template<typename ... T>
void myfunction( void(*f)(T...), char* args[]) {
    f(Converter<T...>::convert(args[i])...); // this is not correct but illustrates the idea
}

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...>());
}

这是一个demo

这里也是用传入的数组大小,static_assert等于传入函数的参数个数