簡體   English   中英

C++:如何使用可變參數模板 arguments 上的類型參數調用 function?

[英]C++: How call a function with type parameter on variadic template arguments?

所以我有一個帶有可變參數模板 arguments 的 function 並且我試圖為每個參數調用一個方法(帶有類型參數),將每個結果值打包到std::tuple中並返回它。 然而,可變參數模板對我來說很難,我還沒有完全理解它們。

甚至有可能在 C++ 中實現這一點嗎?

到目前為止,這是我的代碼(在getMultiple函數中有錯誤)。 非常感謝您的幫助!

#include <iostream>
#include <fstream>
#include <sstream>

template<typename T>
T get(std::istream &stream) {
    T data;
    stream >> data;
    return data;
}

template<typename ... Ts>
std::tuple<Ts...> getMultiple(std::istream &stream) {
    // What am I doing wrong here?
    return std::make_tuple((get<Ts...>(stream)));
}

int main() {
    std::istringstream stream("count 2");
    auto [command, number] = getMultiple<std::string, int>(stream);

    return 0;
}

首先,你忘記了

#include <tuple>

您可能正在尋找的語法是:

return std::make_tuple(get<Ts>(stream)...);

你幾乎是正確的,但你的...錯位了,

get<Ts...>(stream)轉換為get<T0, T1, .., Tn>(stream)

這將是

foo(get<Ts>(stream)...)轉換為foo(get<T0>(stream), get<T1>(stream), .., get<Tn>(stream))

並且您對評估順序有疑問

foo(a(), b())中, a()b()是不確定的,因此a()可能發生在b()之前,或者相反。 可變參數模板不會改變這一點。

所以你不能使用std::make_tuple 幸運的是,在{..}中,順序是從左到右確定的,因此您可以使用:

return std::tuple{get<Ts>(stream)...};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM