繁体   English   中英

在 C++ 中解压缩 C 样式数组以及参数包

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM