![](/img/trans.png)
[英]c++ variadic templates and template template arguments: error: type/value mismatch at argument 1 in template parameter list
[英]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.