C++ 如何覆盖 class 中的 << 运算符
C++ how do i override the << operator within a class
如何覆盖 class 中的 <<
运算符?或者能够从 class 中打印出 vector<byte>
。我当前的代码看起来像
ostream& operator<<(ostream& os, const vector<byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size()-1; i++)
os << hex << (int)bytes[i] << " ";
os << bytes.back();
return os;
}
它挂在class之外,只有在class之外的功能才能cout <<
打印一个vector<byte>
。我希望能够从 class.
中打印一个
编辑 1
我在提到我如何使用它的部分看到了一些混淆,这将是一个很好的例子
# method 1
ostream& operator<<(ostream& os, const vector<byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size()-1; i++)
os << hex << (int)bytes[i] << " ";
os << bytes.back();
return os;
}
int main( {
vector<byte> v = something;
cout << “Vector Example: ” << v << endl;
}
我想在 class 中排名第一 method 1
,但根据某些评论,这是不可能的。有什么不同的方法吗?
编辑 2
感谢@StephanH,我想分享我修改后的工作代码。
#include <vector>
#include <fstream>
#include <cstddef>
#include <iostream>
#include <iomanip>
#include <string>
std::ostream& operator<<(std::ostream& os, const std::vector<std::byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size() - 1; i++)
os << std::hex<< (int)bytes[i] << " ";
os << int(bytes.back());
return os;
}
class MClass
{
public:
std::vector<std::byte> smth;
friend std::ostream& operator<<(std::ostream& stream, const MClass& obj) {
std::string ascii = "hello";
std::vector<std::byte> bytes(ascii.length());
for (size_t i = 0; i < ascii.length(); i++)
{
bytes[i] = static_cast<std::byte>(ascii[i]);
}
return stream << bytes;
}
};
int main() {
MClass m;
std::cout<<m;
}
我还在想办法打印出来m.smth
不确定你想要实现什么以及你所处的环境。这是我的方法
#include <vector>
#include <fstream>
#include <cstddef>
#include <iostream>
#include <iomanip>
std::ostream& operator<<(std::ostream& os, const std::vector<std::byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size() - 1; i++)
os << std::hex<< (int)bytes[i] << " ";
os << int(bytes.back());
return os;
}
class MClass
{
std::vector<std::byte> smth;
friend std::ostream& operator<<(std::ostream& stream, const MClass& obj) {
return stream << obj.smth;
}
};
如何覆盖 class 中的 <<
运算符?或者能够从 class 中打印出 vector<byte>
。我当前的代码看起来像
ostream& operator<<(ostream& os, const vector<byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size()-1; i++)
os << hex << (int)bytes[i] << " ";
os << bytes.back();
return os;
}
它挂在class之外,只有在class之外的功能才能cout <<
打印一个vector<byte>
。我希望能够从 class.
编辑 1
我在提到我如何使用它的部分看到了一些混淆,这将是一个很好的例子
# method 1
ostream& operator<<(ostream& os, const vector<byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size()-1; i++)
os << hex << (int)bytes[i] << " ";
os << bytes.back();
return os;
}
int main( {
vector<byte> v = something;
cout << “Vector Example: ” << v << endl;
}
我想在 class 中排名第一 method 1
,但根据某些评论,这是不可能的。有什么不同的方法吗?
编辑 2
感谢@StephanH,我想分享我修改后的工作代码。
#include <vector>
#include <fstream>
#include <cstddef>
#include <iostream>
#include <iomanip>
#include <string>
std::ostream& operator<<(std::ostream& os, const std::vector<std::byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size() - 1; i++)
os << std::hex<< (int)bytes[i] << " ";
os << int(bytes.back());
return os;
}
class MClass
{
public:
std::vector<std::byte> smth;
friend std::ostream& operator<<(std::ostream& stream, const MClass& obj) {
std::string ascii = "hello";
std::vector<std::byte> bytes(ascii.length());
for (size_t i = 0; i < ascii.length(); i++)
{
bytes[i] = static_cast<std::byte>(ascii[i]);
}
return stream << bytes;
}
};
int main() {
MClass m;
std::cout<<m;
}
我还在想办法打印出来m.smth
不确定你想要实现什么以及你所处的环境。这是我的方法
#include <vector>
#include <fstream>
#include <cstddef>
#include <iostream>
#include <iomanip>
std::ostream& operator<<(std::ostream& os, const std::vector<std::byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size() - 1; i++)
os << std::hex<< (int)bytes[i] << " ";
os << int(bytes.back());
return os;
}
class MClass
{
std::vector<std::byte> smth;
friend std::ostream& operator<<(std::ostream& stream, const MClass& obj) {
return stream << obj.smth;
}
};