在 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
等于传入函数的参数个数
我的问题有点类似于
这里是简化的代码:
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
等于传入函数的参数个数