C++ 显示任何容器元素的通用功能
如何将项目呈现到任何容器的屏幕上C++ 显示任何容器元素的通用功能,c++,containers,C++,Containers,如何将项目呈现到任何容器的屏幕上 我知道你可以用函数重载,但是你可以为不同类型的容器得到很多函数。这是一个棘手的问题,我们可以枚举所有的容器类型并向它们添加打印函数。对于客户容器,需要添加宏以添加操作符 您可以为不同类型的容器提供很多函数 如果使用模板,则不会 仅匹配您可以迭代的内容: template <std::ranges::range R> std::ostream& operator<<(std::ostream& os, const R &am
我知道你可以用函数重载,但是你可以为不同类型的容器得到很多函数。这是一个棘手的问题,我们可以枚举所有的容器类型并向它们添加打印函数。对于客户容器,需要添加宏以添加
操作符
您可以为不同类型的容器提供很多函数
如果使用模板,则不会
仅匹配您可以迭代的内容:
template <std::ranges::range R>
std::ostream& operator<<(std::ostream& os, const R & range) {
for (auto & elem : range) {
os << elem;
}
return os;
}
模板
ostream&operatorI不认为有一种解决方案适用于任何容器。主要是因为堆栈和队列没有迭代器。还有一个概念,即存储在容器中的每种可能的类型都可以“呈现”。这假设了一些通用方法,如运算符。例如at使用std::for_each(nums.cbegin(),nums.cend(),print)显示容器中的所有项如上面提到的,在C++中没有通用的打印功能,例如在JavaScript中。在C++中,需要重载<代码>操作符
template <std::ranges::range R>
std::ostream& operator<<(std::ostream& os, const R & range) {
for (auto & elem : range) {
os << elem;
}
return os;
}
template <typename T>
concept is_tuple = requires { typename std::tuple_size<T>::type; };
template <is_tuple T, std::size_t... Is>
std::ostream& print_tuple(std::ostream& os, const T & tuple, std::index_sequence<Is...>) {
return os << ... << get<Is>(tuple);
}
template <is_tuple T>
std::ostream& operator<<(std::ostream& os, const T & tuple) {
return print_tuple(os, tuple, std::make_index_sequence<std::tuple_size_v<T>>{});
}