我試圖理解折疊和可變引數模板。我設計了一個非常幼稚的 Tuple 類。我可以創建一個元組物件,但我想列印該物件。幾乎在任何地方都沒有觸及這個問題似乎很奇怪(至少到目前為止我還沒有找到任何資源。這是代碼
#include <iostream>
#include <string>
// this is the implementation of my own tuple using variadic templates
template <class... T>
class Tuple {};
template <class T, class... Args>
class Tuple<T, Args...> {
private:
T first;
Tuple<Args...> rest;
public:
// friends
friend std::ostream& operator<<(std::ostream& out, const Tuple<T, Args...>& tuply);
public:
Tuple(T&& firsty, Args&&... resty): first(firsty), rest(resty...){};
};
template <class T, class Args...>
std::ostream& operator<<(std::ostream& out, const Tuple<T, Args...>& tuply){
out << tuply.first;
((out << " - " << std::forward<Args>(tuply.rest)), ...);
}
可能Tuple<T, Args...>是非法的,我使用折疊的行沒有意義。我真的找不到一種方法來完成這項作業。有人可以幫忙嗎?
uj5u.com熱心網友回復:
只需使用遞回:
// this is the implementation of my own tuple using variadic templates
template<class... T>
class Tuple {};
template<class T, class... Args>
class Tuple<T, Args...> {
private:
T first;
Tuple<Args...> rest;
friend std::ostream& operator<<(std::ostream& out, const Tuple& tuply) {
out << tuply.first;
if constexpr (sizeof...(Args) == 0) return out;
else return out << " - " << tuply.rest;
}
public:
Tuple(T&& firsty, Args&&... resty)
: first(std::forward<T>(firsty)), rest(std::forward<Args>(resty)...) { }
};
演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380305.html
上一篇:有沒有辦法將函式指標轉換為std::function而不指定回傳型別和引數型別?
下一篇:鏈接多載下標運算子[]的編譯失敗
