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