c++ - 如何在使用时不知道类型的情况下为输入/输出编写 C++ 运算符重载
问题描述
我做了一个运算符:
template <typename Container>
std::ostream& operator << (std::ostream& out, const Container& container) {
string result = "{";
out << result;
return out;
}
当我想使用它时:
enum class space { empty, full, half };
using elements_t = vector<space>;
int main(int argc, char** argv)
{
elements_t elems = { space::half };
cout << elems;
return 0;
}
它抛出一个错误:
'operator <<' 是模棱两可的。
您如何指定要使用自定义的?我知道使用模板函数之后,您会在 <> 中分配类型,如果我有一个特定的类/结构,我可以使运算符成为本地或朋友,但如果我希望它是全局的怎么办?
解决方案
如果我尝试您的程序,编译器会抱怨您的自定义运算符定义operator<<()
内部(最好复制包括行号在内的确切错误消息)。我想你想在std::operator<<
这里使用(重复会导致无限递归)。为此,您可以这样写:
template <typename Container>
std::ostream& operator << (std::ostream& out, const Container& container) {
std::string result = "{";
std::operator<<(out, result);
return out;
}
推荐阅读
- swift - 如何在 Objective-C 中使用 swift 协议实现?
- sql - 分号 将行分成相等的批次
- duplicity - 重复增量备份:处理远程清单时出错
- multithreading - 无法使用 docker-selenium 独立实现线程
- mysql - Mysql 在两个日期条件之间的非常大的行上计算性能
- python - seaborn,python中的“free_y” facet_wrap等价物
- image - 测试文件名是否在项目文件中的任何位置的最佳方法是什么
- javascript - 什么是 DOMElement.shadowRoot?
- android - 如何在 android sdk 29 或最低版本的启动设备上启动服务?
- python - map() 如何与 python 中的字典一起使用?