Как бы я переопределил оператор <<
в классе? Или сможете печатать 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;
}
Он висит вне класса, и только функции вне класса могут cout <<
и печатать vector<byte>
. Я хочу иметь возможность напечатать один из класса.
Edit 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;
}
Я хочу иметь топ 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