2
我有一個函數,(以後簡化邏輯)的形式爲如何展開元組以提供匹配參數?
std::tuple<font_heap, font_heap> get_font_heaps(std::vector<uint8_t> const& a, std::vector<uint8_t> const& b) {
return std::make_tuple(get_font_heap_from_data(a), get_font_heap_from_data(b));
}
我想模板化該功能使得當用戶通過在它能夠處理儘可能多或儘可能少的數據集。
auto [serif, sansserif, monospace] = get_font_heaps(serif_data, sansserif_data, monospace_data);
auto [comic_sans] = get_font_heaps(comic_sans_data);
我試圖重寫邏輯,像這樣開始:
template<typename ... FontDatas>
auto get_font_heaps(std::vector<uint8_t> const& data, FontData&& ...datas) {
if constexpr(sizeof...(FontDatas) == 0) {
return std::make_tuple(get_font_heap_from_data(data));
else {
return std::make_tuple(get_font_heap_from_data(data), get_font_heaps(std::forward<FontDatas>(datas)...);
}
但很明顯,即使這編譯,它不相當做我想做的:它會創建一個嵌套的元組出這個代碼,形式std::tuple<font_heap, std::tuple<font_heap, std::tuple<font_heap>>>
,而我想是std::tuple<font_heap, font_heap, font_heap>
我怎麼能改寫這個邏輯做什麼,我打算?我使用的是MSVC 2017.3,所以我可以訪問很多C++ 17功能,但不能使用Fold Expressions(我懷疑這會大大簡化邏輯)。
如果類型是同質的,我會用'的std :: array'。 –