我的问题有点类似于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样式的数组并调用包含其内容的函数。区别在于,我需要在可变参数中执行此操作...
这里是创建可用于索引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...>());
}