簡體   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