feat support Public,Private,Protected

This commit is contained in:
tqcq 2024-03-03 18:29:40 +08:00
parent e17ae812be
commit 2e3503efb3

View File

@ -46,9 +46,25 @@ Class::ToString() const
{
std::stringstream ss;
ss << "class " << BaseType::ToString() << " {\n";
for (auto &field : fields_) { ss << " " << field->ToString() << ";\n"; }
ss << "\n";
for (auto &method : methods_) { ss << " " << method->ToString() << ";\n"; }
auto builder = [this](bool filter(const BaseType &)) {
std::stringstream tmp_ss;
for (auto &field : fields_) {
if (filter(*field)) { tmp_ss << " " << field->ToString() << ";\n"; }
}
for (auto &method : methods_) {
if (filter(*method)) { tmp_ss << " " << method->ToString() << ";\n"; }
}
return tmp_ss.str();
};
auto public_section = builder([](const BaseType &base) { return base.IsPublic(); });
auto protected_section = builder([](const BaseType &base) { return base.IsProtected(); });
auto private_section = builder([](const BaseType &base) { return base.IsPrivate(); });
if (!sled::Trim(public_section).empty()) { ss << "public:\n" << public_section; }
if (!sled::Trim(protected_section).empty()) { ss << "protected:\n" << protected_section; }
if (!sled::Trim(private_section).empty()) { ss << "private:\n" << private_section; }
ss << "};\n";
return ss.str();
}