如何在不知道类型的情况下为 input/output 编写 C++ 运算符重载
How to write a c++ operator overload for input/output without knowing the type when using it
我做了一个运算符:
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 <<'有歧义。
如何指定要使用自定义的?我知道使用模板函数之后你会在 <> 中分配类型,如果我有一个特定的 class/struct 我可以让运算符成为本地或朋友,但是如果我希望它是全局的呢?
如果我尝试你的程序,编译器会抱怨 operator<<()
inside 你的自定义运算符定义(最好复制包括行号在内的确切错误消息)。我想你想在这里使用 std::operator<<
(重复会导致无限递归)。要做到这一点,你就是这样写的:
template <typename Container>
std::ostream& operator << (std::ostream& out, const Container& container) {
std::string result = "{";
std::operator<<(out, result);
return out;
}
我做了一个运算符:
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 <<'有歧义。
如何指定要使用自定义的?我知道使用模板函数之后你会在 <> 中分配类型,如果我有一个特定的 class/struct 我可以让运算符成为本地或朋友,但是如果我希望它是全局的呢?
如果我尝试你的程序,编译器会抱怨 operator<<()
inside 你的自定义运算符定义(最好复制包括行号在内的确切错误消息)。我想你想在这里使用 std::operator<<
(重复会导致无限递归)。要做到这一点,你就是这样写的:
template <typename Container>
std::ostream& operator << (std::ostream& out, const Container& container) {
std::string result = "{";
std::operator<<(out, result);
return out;
}