use*_*808 6 c++ iostream tuples operator-overloading
所以,如果我有这样的事情
template<typename... Args >
class tuple_class
{
public:
std::tuple<Args...> tup;
/*I left out the other functions */
};
Run Code Online (Sandbox Code Playgroud)
我想重载运算符<<,以便它在类上调用时递归打印元组.
恩.
auto a = tuple_class(1, 2 ,3);
std::cout << a << endl;
Run Code Online (Sandbox Code Playgroud)
希望打印'123'
我见过了元组打印机的其他例子,但我不能在没有麻烦的情况下将它应用到我的班级
我想我应该从这样的成员函数开始
template<typename... Args>
friend std::ostream& operator<<(std::ostream& os, const my_tuple<Args...> &m);
Run Code Online (Sandbox Code Playgroud)
然后是课外的实际功能
template<typename... Args>
std::ostream& operator<<(std::ostream& os, const my_tuple<Args...> &m)
{
os << "SOMETHING" << std::endl;
return os;
}
Run Code Online (Sandbox Code Playgroud)
当我在班上调用<<运算符时,这实际上有效.但我不知道如何让它实际打印元组.
任何帮助,将不胜感激
为了构建解决方案,我使用了这里提到的cppreference中的元组打印代码this。其余的代码是将事物粘合在一起的粘合剂。我在这里放置了工作示例。
#include <tuple>
#include <iostream>
#include <string>
// tuple printer
template<class Tuple, std::size_t N>
struct TuplePrinter {
static std::ostream& print(std::ostream& os, const Tuple& t)
{
TuplePrinter<Tuple, N - 1>::print(os, t);
os << ", " << std::get<N - 1>(t);
return os;
}
};
template<class Tuple>
struct TuplePrinter<Tuple, 1> {
static std::ostream& print(std::ostream& os, const Tuple& t)
{
os << std::get<0>(t);
return os;
}
};
template<class... Args>
std::ostream& print(std::ostream& os, const std::tuple<Args...>& t)
{
os << "(";
TuplePrinter<decltype(t), sizeof...(Args)>::print(os, t);
os << ")\n";
return os;
}
// class to keep tuple inside
template<typename... Args>
class tuple_class {
template<typename... Args2>
friend std::ostream& operator<<(std::ostream& os, const tuple_class<Args2...> &m);
std::tuple<Args...> tup;
public:
tuple_class(Args&&... args) : tup(std::forward<Args>(args)...) {
}
};
// usage of the printer
template<typename... Args>
std::ostream& operator<<(std::ostream& os, const tuple_class<Args...> &m) {
print(os, m.tup);
return os;
}
int main() {
tuple_class<int,float,std::string> tc( 1,3.0f,"string" );
std::cout << tc;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |