В настоящее время я занимаюсь разработкой большинства своих классов C ++ со следующей структурой, и мне было интересно, может ли сообщество дать мне несколько советов о том, как улучшить дизайн моего класса, чтобы сделать его более портативным, дружественным и обслуживаемым в будущем.
#include <vector>
#include <iostream>
namespace CompanyName
{
class Uri;
class Regex;
class String
{
public:
String();
String(const char*);
String(const String&);
virtual ~String();
void trim();
void erase();
void remove(const int);
void remove(const int, const size_t);
void uppercase();
void lowercase();
bool is_null() const;
bool is_empty() const;
size_t length() const;
void append(const String&);
bool compare(const String&) const;
bool compare(const String&, const bool) const;
void replace(const Regex&, const String&);
std::vector<String> split(const Regex&) const;
static const char* to_utf8(const String&);
static const uint16_t* to_utf16(const String&);
static const uint32_t* to_utf32(const String&);
static String from_utf8(const char*);
static String from_utf16(const uint16_t*);
static String from_utf32(const uint32_t*);
static String resource(const Uri&, const int);
static String resource(const Uri&, const String&);
String& operator=(String rhs);
String& operator+(const String& rhs);
String& operator+=(const String& rhs);
bool operator==(const String&) const;
bool operator!=(const String&) const;
bool operator<(const String&) const;
bool operator>(const String&) const;
friend std::ostream& operator<<(std::ostream&, const String&);
friend std::istream& operator>>(std::istream&, const String&);
static const String null;
static const String empty;
protected:
struct protected_pimpl;
protected_pimpl* _protected_pimpl;
private:
struct private_pimpl;
private_pimpl* _private_pimpl;
};
//we have to extract the content so as to not expose the UnicodeString.
inline std::ostream& operator<<(std::ostream& stream, const CompanyName::String& rhs)
{
const char* value = String::to_utf8(rhs);
stream << value;
delete value;
return stream;
}
inline std::istream& operator>>(std::istream& stream, const CompanyName::String& rhs)
{
const char* value = String::to_utf8(rhs);
stream >> value;
delete value;
return stream;
}
}