[英]Unpack C-style array along with parameter pack in C++
我的问题有点类似于这个:我正在使用 C++14 并且我正在尝试“解包”一个 C 样式的数组并调用一个 function 及其内容。 不同之处在于,我需要在可变参数 function 模板中执行此操作,并将数组的每个元素传递到取决于类型参数包的内容中。
这是简化的代码:
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 需要一个指向myfunction
f
的指针,它接受任意数量的 T1、... Tn 类型的 arguments。 args
数组的每个元素都应在传递给f
之前转换为相应的类型。
我该如何在 C++14 中做到这一点?
这是一个创建编译时 integer 序列的解决方案,您可以使用它来索引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...>());
}
这是一个演示。
这也是使用传入的数组的大小,来静态断言它等于传入的static_assert
的参数个数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.