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

问题描述 投票:0回答:1

我的问题有点类似于this one:我正在使用C ++ 14,并且试图“解包” 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中做到这一点?

我的问题与此类似:我正在使用C ++ 14,并且试图“解包” C样式的数组并调用包含其内容的函数。区别在于,我需要在可变参数中执行此操作...

c++ variadic-templates
1个回答
0
投票

这里是创建可用于索引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...>());
}
© www.soinside.com 2019 - 2024. All rights reserved.